2015-01-08 37 views
-1

C++中是否有类似AnsiString(65001)的类似Delphi中的类型?我想用它来在应用程序和DLL之间进行互操作。C++中的AnsiString?

+1

我想这表示窄字符的字符串在Windows代码页65001中,这是严重半支持的UTF-8代码页。只需使用'std :: string'并记住它是UTF-8。 – Deduplicator

+0

@Deduplicator你确定吗? http://pastebin.com/siaV0ytN –

+0

@JohnLewis不知道你在问什么,但你的代码片段工作得很好:http://ideone.com/d5ZAwC – tux3

回答

1

在C++ Builder的具体(它使用相同的RTL如Delphi的),有该AnsiStringT模板类,其提供相同的功能Delphi的AnsiString(N)类型:

template <unsigned short CP> 
class RTL_DELPHIRETURN AnsiStringT : public AnsiStringBase 

CP是所需的代码页。

的RTL的UTF8StringRawByteString类型只是别名,此功能:

德尔福:

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

C++ Builder中:

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

和'Visual C++'? –

+0

在其他C++编译器中没有这样的等价功能。你必须通过'MultiByteToWideChar()'''WideCharToMultiByte()','std :: codecvt'等(你可以用它来编写你自己的'AnsiStringT'-like包装类,如果需要的话)。 –

+0

我必须将'AnsiString'移植到'Visual C++'然后:) –

4

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

虽然请注意,如果您真的想要,您可以始终强制std :: string中的某些多字节Unicode字符,但没有编译器强制保证每个逻辑字符都由1个字节编码。没有简单的方法来用C++强制执行,而不是编写自己的类。

为了实现互操作性,您可能需要使用原始cstring(char*)。

相关问题