【发布时间】:2010-12-19 03:46:07
【问题描述】:
我想测试我从数据文件中读取的字节是否为0xEE,我该怎么办?我试过if (aChar == 0xEE),但似乎没有用。
【问题讨论】:
-
这正是您根据十六进制值测试 char 或任何其他数字类型的方式。什么不工作?贴一些源代码。
-
aChar 的类型是什么?是指针吗?
我想测试我从数据文件中读取的字节是否为0xEE,我该怎么办?我试过if (aChar == 0xEE),但似乎没有用。
【问题讨论】:
读取有符号字符时,该值永远不会是 0xEE。即:
#include <stdio.h>
int main()
{
char c = 0xEE; // assumes your implementation defines char as signed char
// c is now -18
if (c == 0xEE)
{
printf("Char c is 0xEE");
}
else
{
printf("Char c is NOT 0xEE");
}
}
输出将是
Char c is NOT 0xEE
读取带符号的字符时,该值的范围为 -0x7F 到 0x80。 unsigned char 被解释为从 0x00 到 0xFF,通常是您想要的“原始”字节。
变化:
char aChar;
到
unsigned char aChar;
它应该可以工作。
【讨论】:
char 是有符号类型,那么char c = 0xEE; 会导致c 为负值(-18)并且测试c == 0xEE 将始终失败。由于十六进制整数文字0xEE 的类型为int,因此char 将被提升为int 以进行比较。 -18 != 238.
使用字符常量将避免任何实现定义的有符号/无符号字符类型问题:
if( aChar == '\xee' )
【讨论】: