我有一个LPTSTR
类型的变量,我使用std::cout
打印到<<
。在ANSI系统中(不知道确切的确定位置)它工作正常,它打印了字符串。现在在Unicode系统中,我得到一个十六进制地址而不是字符串。那么,为什么LPSTR
(如果未定义LPTSTR
,UNICODE
将被解析)与LPWSTR
的行为不同(... 。如果定义了UNICODE
,我如何打印后者指向的字符串?
答案 0 :(得分:10)
对于Unicode字符串,您需要wcout
。
您可能会看到十六进制,因为ANSI / ASCII输出流不知道如何处理Unicode字符。
LPTSTR
和LPWSTR
实际上是从C Windows API时代继承的C-isms。对于C ++,我强烈建议您改为使用std::string
和/或std::wstring
。
如果您需要滚动自己的宏,则需要以下内容:
#ifdef _UNICODE
#define COUT wcout
#else
#define COUT cout
#endif