获取TCHAR的Unicode值

时间:2014-03-27 22:54:33

标签: c visual-studio winapi

我需要获取TCHAR的Unicode值。

e.g。如果TCHAR =" A",我想找到0x41的Unicode值。

转换为int是安全的,还是我应该使用的API函数?

2 个答案:

答案 0 :(得分:4)

你的问题有点不正确。 TCHAR可以是8位或16位字符。就其本身而言,仅知道角色的宽度是不够的。您还需要知道它是如何编码的。例如:

  • 如果您有8位ASCII编码字符,则其数值为Unicode代码点。
  • 如果您使用单字节字符集中的8位Windows ANSI编码字符,则转换为带MultiByteToWideChar的UTF-16。 UTF-16元素的数值是Unicode代码点。
  • 如果您有来自双字节或多字节字符集的8位Windows ANSI编码字符元素,则该8位字符通常不会定义字符。通常,您需要多个char元素。
  • 同样适用于16位UTF-16编码的字符元素。 UTF-16再次是可变宽度编码,单个字符元素通常不定义Unicode代码点。

因此,为了继续,你必须清楚你的角色是如何编码的。

在做这之前你需要知道它有多宽。 TCHAR可以是8位或16位,具体取决于您的编译方式。这种灵活性是我们如何处理Win 9x和Win NT的单一源代码开发。前者没有Unicode支持。现在,Win 9x很幸运地被遗忘了,TCHAR也是如此。遗憾的是,它存在于无数的MSDN示例中,但您应该忽略它。在Windows上,本机字符元素为wchar_t

答案 1 :(得分:1)

嗯,我猜你想要UTF-32号码 Arx已经说过,TCHAR可以是charwchar_t

如果你有一个char字符串,它可能包含数据
使用系统的默认单字节字符集(UTF-8也是可行的)
处理许多不同的字符集很困难 Windows内置了转换内容:
使用MultiByteToWideChar获取wchar_t - 数组的char数组。

如果您有一个wchar_t - 数组,那么Windows上很可能是UTF-16(LE,没有BOM ...)。 我不知道任何内置函数来获取UTF-32
但是编写自己的转换并不是那么难(否则,使用一些lib) http://en.wikipedia.org/wiki/UTF-16
有些小小的摆弄,但仅此而已。

TCHAR是预处理器的东西,
所以你可以实现不同的行为
基于#define也是如此。或sizeof或......)