【发布时间】:2014-01-27 22:48:14
【问题描述】:
我正在尝试跳过 UTF-8 编码文件中的 BOM,但我在 ifs 中的测试失败:
int i = 0;
if( str[i] == '\0xef' ) {
++i;
}
if( str[1] == '\0xbb' ) {
++i;
}
if( str[2] == '\0xbf' ) {
++i;
}
我不知道为什么它们不起作用。有符号和无符号之间必须存在某种隐式转换,并且 Visual Studio 在调试时显示带有 2 个八位字节的字符代码,即使我使用的是 1 字节字符。
发生了什么事?谢谢你:)
【问题讨论】:
-
'\0xbf'是多字节字符常量 -
str是如何定义的?是有符号的还是无符号的char数组?
-
这是一个 const char *。我也试过 0xbf 而不是 '\0xbf' 但结果是一样的。
-
char 是 8 位有符号的,因此它的值在 -128..127 范围内。注意:0xbf > 127
标签: c++ c comparison byte signed