【问题标题】:Fastest and elegant way to transform a CHAR to a TCHAR将 CHAR 转换为 TCHAR 的最快和优雅的方式
【发布时间】:2015-03-01 11:52:40
【问题描述】:

我通常需要将 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 库的情况下,有没有更好、最快的方法?谢谢。

【问题讨论】:

  • 您是否尝试过更快地写一些东西?你测量了吗?
  • 对于这种情况,Decimal = chDecimal; 会做你想做的事。当然,如果char chDecimal[] = "\xc2\xb0"; 会出现问题 - 但是你的代码也不会工作。
  • 为什么你认为你需要转换,基于wchar_t 的流也可以处理char?这也是上述代码正确的原因,因为它将基于TCHAR 的字符串写入std::wcout,但我想知道那不应该是基于wchar_t 的字符串吗?另一个建议:如果可能,避免使用TCHAR。此外,如果它是使用不仅仅是基本 ASCII 的文本,请避免使用纯 CHAR,而是使用 wchar_tWCHAR
  • 你的意思是因为固定长度为 1?

标签: c++ unicode tchar


【解决方案1】:

问题中提供的代码,

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

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

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

如果意图仅转换 ASCII 字符,则只需 复制它,使用 C++ 复制赋值运算符 = 或初始化。再简单不过了。

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2019-01-05
    • 2011-11-02
    • 2014-10-11
    • 2010-12-19
    相关资源
    最近更新 更多