【发布时间】:2016-03-04 18:46:10
【问题描述】:
所以我有一个wchar_t tempc;。我想看看它是否在 unicode 范围 000000-00007F 内。
这是我尝试比较值的方式:
if ((tempc < (wchar_t)000000) || (tempc > (wchar_t)00007F)) { ...
我认为这会将 unicode 值 000000 和 00007F 转换为 wchar_t。但我收到以下错误:
error: invalid suffix "F" on integer constant
error: invalid digit "8" in octal constant
error: invalid suffix "FF" on integer constant
error: invalid digit "8" in octal constant
很明显,编译器不会像 00007F 这样的值是 unicode。我在这里有什么误解?我是否先将它们转换为 unicode(如果是,如何转换?),然后转换为 wchar_t?
【问题讨论】:
-
您应该使用
0x前缀作为十六进制数字 -
十六进制值以
0x开头。仅以0开头的值是八进制。 -
成功了,谢谢。但我很困惑..“unicode”和“hexadecimal”是同义词吗?
-
Unicode 代码点值(通常)使用hexadecimal 数字系统编写。 unicode.org/charts
-
你不必用十六进制写数字;
0x7F也可以写成127或0177。所以代码可能是(tempc < (wchar_t)0 || tempc > (wchar_t)127)或(tempc < (wchar_t)0 || tempc > (wchar_t)0177)。但由于其他人只使用十六进制,因此最简单的方法是复制十六进制值,而不是进行数学运算以转换为十进制或八进制。