C++ 中的 AnsiString?

AnsiString in C++?

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

std::string 保证充当 chars 的容器,并且 char 保证正好是 1 个字节,这似乎与 AnsiString 的描述相匹配。

虽然请注意,如果您真的愿意,您总是可以在 std::string 中强制使用一些多字节 Unicode 字符,但编译器并不能强制保证每个逻辑字符都由 1 个字节编码。在 C++ 中没有简单的方法来强制执行,除非编写自己的 class.

为了互操作性,您可能希望使用原始 cstring (char*)。

特别是在 C++Builder 中(它使用与 Delphi 相同的 RTL),AnsiStringT 模板化 class 提供与 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++Builder:

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