C ++中的AnsiString?

时间:2015-01-08 23:34:49

标签: c++ delphi visual-c++

在C ++中是否存在类似AnsiString(65001)的类型,就像在Delphi中一样?我想将它用于应用程序和DLL之间的互操作。

2 个答案:

答案 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的UTF8StringRawByteString类型只是此功能的别名:

的Delphi:

type
  UTF8String = type AnsiString(65001);
  RawByteString = type AnsiString($ffff);

C ++生成器:

typedef AnsiStringT<65001> UTF8String;
typedef AnsiStringT<65535> RawByteString;