C++ 中的 AnsiString?
AnsiString in C++?
C++ 中是否有像 Delphi 中那样的 AnsiString(65001)
类型?我想将它用于应用程序和 DLL 之间的互操作。
std::string
保证充当 char
s 的容器,并且 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 的 UTF8String
和 RawByteString
类型只是此功能的别名:
Delphi:
type
UTF8String = type AnsiString(65001);
RawByteString = type AnsiString($ffff);
C++Builder:
typedef AnsiStringT<65001> UTF8String;
typedef AnsiStringT<65535> RawByteString;
C++ 中是否有像 Delphi 中那样的 AnsiString(65001)
类型?我想将它用于应用程序和 DLL 之间的互操作。
std::string
保证充当 char
s 的容器,并且 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 的 UTF8String
和 RawByteString
类型只是此功能的别名:
Delphi:
type
UTF8String = type AnsiString(65001);
RawByteString = type AnsiString($ffff);
C++Builder:
typedef AnsiStringT<65001> UTF8String;
typedef AnsiStringT<65535> RawByteString;