当前位置: 首页 > 工具软件 > godot-cpp > 使用案例 >

GDExtension cpp 中godot::String与char*、std::string的相互转换

阮选
2023-12-01

在GDExtension cpp中godot::String与char*、std::string的相互转换

  • char* 转换为 godot::String
    godot::String的构造函数

      String();
      String(const String &from);
      String(const StringName &from);
      String(const NodePath &from);
      String(String &&other);
      String(const char *from);
      String(const wchar_t *from);
      String(const char16_t *from);
      String(const char32_t *from);
    
    char* str1 = "hello";
    String str2 = String((const char*)str1);
    
  • godot::String 转换为 char*
    godot::String 貌似不能直接转换为 char*(?),这里借助了godot::CharString

    godot::String 转为 godot::CharString

    namespace godot {
      class String {
        ...
          CharString utf8() const;
          CharString ascii() const;
          Char16String utf16() const;
          Char32String utf32() const;
          CharWideString wide_string() const;
        ...
      }
    }
    

    在godot::CharString/Char16String…类中有get_data()方法,返回各自对应的const char*

    class CharString {
    friend class String;
    ...
    public:
        ...
        const char *get_data() const;
        ...
    };
    class Char16String{const char16_t *get_data() const;}
    class Char32String{const char32_t *get_data() const;}
    class CharWString{const wchar_t *get_data() const;}
    

    具体的转换过程

    char* testChar = "world";
    String aaa = String((const char*)testChar);
    CharString charStr = aaa.utf8();
    const char* bbb = charStr.get_data();
    

    std::string 与 godot::String之间好像不能直接转换(?源码中没看见相关方法)需要先转为 char*。
    char* 与 std::string之间的相互转换相信大家都会,不在赘述。

 类似资料: