获取TCHAR的Unicode值

获取TCHAR的Unicode值,c,visual-studio,winapi,C,Visual Studio,Winapi,我需要获取TCHAR的Unicode值 e、 g.如果TCHAR=“A”,我想找到0x41的Unicode值 强制转换为int是否安全,或者是否有我应该使用的API函数?好吧,我猜您需要UTF-32数字。 Arx已经说过,TCHAR可以是char或wchar\t 如果您有一个char-字符串,它可能会包含数据 使用系统的默认单字节字符集(UTF-8也可以) 因为处理许多不同的字符集是困难的 Windows有内置的转换功能: 使用MultiByteToWideChar获取char-数组的wchar

我需要获取TCHAR的Unicode值

e、 g.如果TCHAR=“A”,我想找到0x41的Unicode值


强制转换为int是否安全,或者是否有我应该使用的API函数?

好吧,我猜您需要UTF-32数字。
Arx已经说过,
TCHAR
可以是
char
wchar\t

如果您有一个
char
-字符串,它可能会包含数据
使用系统的默认单字节字符集(
UTF-8也可以)
因为处理许多不同的字符集是困难的
Windows有内置的转换功能:
使用
MultiByteToWideChar
获取
char
-数组的
wchar\u t
-数组

如果您有一个
wchar\u t
-数组,它很可能是Windows上的
UTF-16
(LE,无BOM…) 我不知道有什么内置函数可以获取它的
UTF-32

但是编写自己的转换并不是那么难(否则,使用一些lib)

有点吹毛求疵,但仅此而已

(TCHAR是一个预处理器,
因此,您可以实现不同的行为

基于
#也定义
'.或
sizeof
或…

好吧,我猜你想要UTF-32号码。
Arx已经说过,
TCHAR
可以是
char
wchar\t

如果您有一个
char
-字符串,它可能会包含数据
使用系统的默认单字节字符集(
UTF-8也可以)
因为处理许多不同的字符集是困难的
Windows有内置的转换功能:
使用
MultiByteToWideChar
获取
char
-数组的
wchar\u t
-数组

如果您有一个
wchar\u t
-数组,它很可能是Windows上的
UTF-16
(LE,无BOM…) 我不知道有什么内置函数可以获取它的
UTF-32

但是编写自己的转换并不是那么难(否则,使用一些lib)

有点吹毛求疵,但仅此而已

(TCHAR是一个预处理器,
因此,您可以实现不同的行为

基于
#define
''s。或
大小
或…

您的问题有点格式错误。
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

你的问题有点不恰当。
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

定义“unicode值”。原始表号(=UTF-32号)
TCHAR
可以是
char
WCHAR
WCHAR\u t
),具体取决于您如何编译代码,问题的答案取决于哪个。你需要更清楚你在做什么。不管是哪种情况,cast可能不是正确的答案。我已经澄清了我的问题。第一步是停止使用TCHAR。这样你就可以为Win95和WinNT编写代码了。前者是ANSI,后者处理Unicode。现在是2014年。你不再支持Win 9x了,对吧?所以sto