-2

我通常需要将 CHAR 或 CHAR* 转换为 TCHAR 或 TCHAR*

CHAR chDecimal = 'A';
TCHAR Decimal = '\0';
int written = MultiByteToWideChar(CP_ACP, 0, &chDecimal, 1, &Decimal, 1);  
std::wcout << Decimal << endl;
getchar();

在不使用 ATL 或其他 Microsoft 库的情况下,有没有更好、最快的方法?谢谢你。

4

1 回答 1

3

问题中提供的代码,

CHAR chDecimal = 'A';
TCHAR Decimal = '\0';
int written = MultiByteToWideChar(CP_ACP, 0, &chDecimal, 1, &Decimal, 1);

不会像声称的那样转换为TCHAR(取决于是否UNICODE定义)。相反,它无条件地转换为wchar_t. 此外,使用T支持 Windows 9x 并且在 2000 年随着 Unicode 层的引入已经过时的 Microsoft 的东西,对于非遗留代码来说是非常可疑的做法。

无论如何,转换单个编码点是一种非常可疑的做法。对于每个字符超过一个字节的任何编码方案(例如日语代码页或 UTF-8),它都会失败。

如果意图仅转换 ASCII 字符,则只需使用 C++ 复制赋值运算符或初始化来复制它。=没有比这更简单的了。

于 2015-03-01T12:06:57.557 回答