2009-11-22 72 views
3

我想测试从数据文件中读取的字节是否为0xEE,我该怎么办?我试过if (aChar == 0xEE),但似乎没有工作。如何根据十六进制值测试一个字节?

+3

这正是你如何测试一个字符,或任何其他数字类型,对一个十六进制值。什么不起作用?张贴一些源代码。 – 2009-11-22 02:39:18

+0

aChar的类型是什么?它是一个指针吗? – 2009-11-22 02:40:28

回答

9

读取签名字符时,该值永远不会为0xEE。 IE:

#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。一个无符号的字符解释从0x00到0xFF,通常是你想要的“原始”字节。

变化:

char aChar; 

unsigned char aChar; 

,它应该工作。

+4

应该指出,一个普通的老字符可以是有符号的或无符号的;这取决于实施。 – 2009-11-22 02:45:12

+0

@Martin这是完整的语义。我知道你可以分配0xFF,但是如果一个有符号的char是0xFF,测试总是会失败。 – 2009-11-22 18:01:17

+0

只是为了重申James McNellis,无论您的示例是否有效,它都取决于实现。 – rlbond 2009-11-22 18:10:59

6

使用字符常量将避免定义符号/无符号字符类型问题的任何实施:

if(aChar == '\xee') 
相关问题