在C ++中是否存在类似AnsiString(65001)
的类型,就像在Delphi中一样?我想将它用于应用程序和DLL之间的互操作。
答案 0 :(得分:4)
std::string
保证充当char
s的容器,char
保证恰好是1个字节,似乎与AnsiString的描述匹配。
虽然请注意,如果你真的想要,你总是可以在std :: string中强制使用一些多字节的Unicode字符,但是没有编译器强制保证每个逻辑字符都由1个字节编码。没有简单的方法可以在C ++中强制执行,没有编写自己的类。
对于互操作性,您可能希望使用原始cstring(char*
)。
答案 1 :(得分:1)
在C ++ Builder中(使用与Delphi相同的RTL),AnsiStringT
模板化的类提供与Delphi的AnsiString(N)
类型相同的功能:
template <unsigned short CP>
class RTL_DELPHIRETURN AnsiStringT : public AnsiStringBase
CP
是所需的代码页。
RTL的UTF8String
和RawByteString
类型只是此功能的别名:
的Delphi:
type
UTF8String = type AnsiString(65001);
RawByteString = type AnsiString($ffff);
C ++生成器:
typedef AnsiStringT<65001> UTF8String;
typedef AnsiStringT<65535> RawByteString;