如何使用C比较十六进制值?

时间:2011-10-14 12:16:17

标签: c hex

我正在使用十六进制值。到现在为止,我知道如何打印十六进制值以及精确的东西。现在我想比较十六进制值。例如,我正在将文件中的数据读入char缓冲区。现在我想比较缓冲区中数据的十六进制值。有这样的吗?

if  hex(buffer[i]) > 0X3F  
then
//do somthing

我该怎么做?

5 个答案:

答案 0 :(得分:13)

你快到了:

if (buffer[i] > 0x3f)
{
    // do something
}

请注意,不需要将任何内容“转换”为十六进制 - 您可以直接比较字符或整数值,因为十六进制常量(如0x3f)只是表示整数值的另一种方式。 0x3f == 63(十进制)== ASCII'?'。

答案 1 :(得分:5)

计算机中的数字都是0和1。在基数10或基数16(十六进制)或字符(例如“a”)中查看它们不会更改数字。

因此,要与十六进制比较,您不需要做任何事情。

例如,如果你有

int a = 71;

然后以下两个陈述是等价的:

if (a == 71)

if (a == 0x47)

答案 2 :(得分:4)

是的,你可以:

 if  (buffer[i] > 0x3F)

(注意小写的x)。 编辑结果0X3F也应该可以正常工作,但我很想说这不是C程序员通常写的东西。

答案 3 :(得分:1)

将char与hex进行比较时,必须小心:

Using the == operator to compare a char to 0x80 always results in false?

我建议在C99中引入这种语法以确保

if (buffer[i] > '\x3f')
{
    // do something
}

它告诉编译器0x3f是char而不是int(类型安全),否则你可能会看到这个比较的问题。

事实上,clang编译器会警告你:

将常数128与类型' char'的表达式进行比较总是假的[-Werror,-Wututological-constant-out-of-range-compare]

答案 4 :(得分:0)

十六进制值不是新的数据类型,只是其他数字方法,如

int a = 10;

十六进制打印

printf("a in hex value %x ",a);

输出

a in hex value A
if环中的

if(a == 0xa)
    do something

十进制

printf("a in decimal value %d ",a);

输出

a in hex value 10
if环中的

if(a == 10)
    do something