C++中是否有类似AnsiString(65001)
的类似Delphi中的类型?我想用它来在应用程序和DLL之间进行互操作。C++中的AnsiString?
回答
在C++ Builder的具体(它使用相同的RTL如Delphi的),有该AnsiStringT
模板类,其提供相同的功能Delphi的AnsiString(N)
类型:
template <unsigned short CP>
class RTL_DELPHIRETURN AnsiStringT : public AnsiStringBase
凡CP
是所需的代码页。
的RTL的UTF8String
和RawByteString
类型只是别名,此功能:
德尔福:
type
UTF8String = type AnsiString(65001);
RawByteString = type AnsiString($ffff);
C++ Builder中:
typedef AnsiStringT<65001> UTF8String;
typedef AnsiStringT<65535> RawByteString;
和'Visual C++'? –
在其他C++编译器中没有这样的等价功能。你必须通过'MultiByteToWideChar()'''WideCharToMultiByte()','std :: codecvt'等(你可以用它来编写你自己的'AnsiStringT'-like包装类,如果需要的话)。 –
我必须将'AnsiString'移植到'Visual C++'然后:) –
std::string
保证充当char
s的容器,并且char
保证完全是1个字节,这似乎与AnsiString的描述相匹配。
虽然请注意,如果您真的想要,您可以始终强制std :: string中的某些多字节Unicode字符,但没有编译器强制保证每个逻辑字符都由1个字节编码。没有简单的方法来用C++强制执行,而不是编写自己的类。
为了实现互操作性,您可能需要使用原始cstring(char*
)。
- 1. C#AnsiString到字符串
- 2. D2009 TStringlist ansistring
- 3. AnsiString类型要流
- 4. 哪一个需要最大的命中:AnsiString到String或String到AnsiString?
- 5. C++ Builder中:?转换二进制代码AnsiString类型
- 6. 转换 - 错误E2015,歧义AnsiString类型(炭)和AnsiString类型(短)之间
- 7. AnsiString被截断了足够的空间
- 8. Dapper映射字符串参数为AnsiString
- 9. 将AnsiString转换为Unicode字符串
- 10. 有效地将文件读入Pascal AnsiString
- 11. COM服务器Delphi 2009中的AnsiString参数
- 12. 使用FreePascal将AnsiString转换为Lazarus中的UnicodeString
- 13. 在Delphi XE4中使用类似字节的AnsiString
- 14. 包括DShow.h中断BDS2006上的VCL AnsiString :: sprintf()
- 15. 在Delphi 2009中将整数值转换为AnsiString
- 16. 定义:AnsiString类型,WideString的,字符串的char [],字符*,BSTR,
- 17. Delphi:在AnsiString中将TByte转换为其对应的十六进制值
- 18. Delphi XE - 我应该使用String还是AnsiString?
- 19. 德尔福错误:得到“无类型”,预计“AnsiString”
- 20. 将AnsiString强制转换为PAnsiString时会发生什么?
- 21. Delphi(2009) - 转换AnsiString读取或保留换行符?
- 22. AnsiString类型错误201免费帕斯卡
- 23. 为什么这个PAnsiChar在转换为AnsiString时会被切碎?
- 24. 可以将NHibernate字符串类型配置为默认为AnsiString?
- 25. 德尔福AnsiString操纵 - PAnsiChar变得腐败?
- 26. 演员AnsiString(myPAnsiChar)实际上做了什么?
- 27. “的PropertyAccessException:无效的演员”当试图检索存储为AnsiString类型
- 28. 如何将以空字符结尾的字符串转换为AnsiString?
- 29. 是否有任何工具/实用工具将“string”转换为pascal源文件中的“AnsiString”?
- 30. 在Delphi中,我发送AnsiString数据到C++ DLL函数,但输入值丢失。为什么发生这种情况?
我想这表示窄字符的字符串在Windows代码页65001中,这是严重半支持的UTF-8代码页。只需使用'std :: string'并记住它是UTF-8。 – Deduplicator
@Deduplicator你确定吗? http://pastebin.com/siaV0ytN –
@JohnLewis不知道你在问什么,但你的代码片段工作得很好:http://ideone.com/d5ZAwC – tux3