如何针对十六进制值测试字节?

der*_*dji 3 c++ hex char

我想测试从数据文件中读取的字节是否为0xEE,我该怎么办?我试过if (aChar == 0xEE)但似乎没有用.

Dou*_* T. 9

读取带符号的char时,该值永远不会是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");
    }

}
Run Code Online (Sandbox Code Playgroud)

输出将是

Char c is NOT 0xEE
Run Code Online (Sandbox Code Playgroud)

读取带符号的字符时,该值的范围为-0x7F至0x80.无符号字符从0x00到0xFF解释,通常是"raw"字节所需的字符.

更改:

char aChar;
Run Code Online (Sandbox Code Playgroud)

unsigned char aChar;
Run Code Online (Sandbox Code Playgroud)

它应该工作.

  • 应该注意的是,普通的旧字符可以是签名的也可以是未签名的; 这取决于实施. (4认同)

Cli*_*ord 6

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

if( aChar == '\xee' )
Run Code Online (Sandbox Code Playgroud)