我正在处理十六进制数值。目前为止,我知道如何打印十六进制数值并控制其精度。现在我想要比较这些十六进制数值。比如说,我从一个文件中读取数据到一个char缓冲区中,然后我想要比较这个缓冲区中数据的十六进制值。是否有类似的方法可以实现?
if hex(buffer[i]) > 0X3F
then
//do somthing
我该怎么做呢?
您已经接近成功了:
if (buffer[i] > 0x3f)
{
// do something
}
请注意,没有必要将任何东西转换为十六进制 - 您可以直接比较字符或整数值,因为十六进制常量(例如0x3f)只是表示整数值的另一种方式。0x3f == 63(十进制)== ASCII“?”。计算机中的数字都是由0和1组成的。无论使用十进制、十六进制或字符(比如'a')表示,其值并不会改变。
因此,与十六进制进行比较时,你不需要进行任何操作。
例如,如果你有:
int a = 71;
以下两个语句是等价的:
if (a == 71)
并且
if (a == 0x47)
可以的:
if (buffer[i] > 0x3F)
0X3F
也应该能正常工作,但我倾向于说这不是C程序员通常写的方式。printf
是正确的。通常不使用 X
,但是为了让 OP 知道两者都可以工作,在某些情况下可能会看到 X
而不是 x
:) - another.anon.coward在将char与hex进行比较时,必须小心:
使用“==”运算符将char与0x80进行比较始终会得到false的结果吗?
我建议使用C99中引入的这种语法来确保准确性。
if (buffer[i] > '\x3f')
{
// do something
}
它告诉编译器0x3f是char而不是int(类型安全),否则你可能会在比较时遇到问题。
事实上,clang编译器会警告你:
将常量128与类型为'char'的表达式进行比较始终为false [-Werror,-Wtautological-constant-out-of-range-compare]
十六进制值并不是新的数据类型,它只是另一种数值方法,例如
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