[英]How to compare hex values using C?
我正在使用十六进制值。 到现在为止,我知道如何打印十六进制值以及精确的东西。 现在我想比较十六进制值。 例如,我正在将文件中的数据读入char缓冲区。 现在我想比较缓冲区中数据的十六进制值。 有这样的事吗?
if hex(buffer[i]) > 0X3F
then
//do somthing
我怎样才能做到这一点?
你快到了:
if (buffer[i] > 0x3f)
{
// do something
}
请注意,不需要将任何内容“转换”为十六进制 - 您可以直接比较字符或整数值,因为十六进制常量(如0x3f)只是表示整数值的另一种方式。 0x3f == 63(十进制)== ASCII'?'。
计算机中的数字都是0和1。 在基数10或基数16(十六进制)或作为字符(例如“a”)查看它们不会更改数字。
因此,要与十六进制比较,您不需要做任何事情。
例如,如果你有
int a = 71;
那么以下两个陈述是等价的:
if (a == 71)
和
if (a == 0x47)
是的你可以:
if (buffer[i] > 0x3F)
(注意小写的x)。 编辑它结果是0X3F
应该工作,但我很想说这不是C程序员通常写的东西)。
将char与hex进行比较时,必须小心:
我建议在C99中引入这种语法
if (buffer[i] > '\x3f')
{
// do something
}
它告诉编译器0x3f是char而不是int(类型安全),否则你很可能会看到这个比较的问题。
事实上,clang编译器会警告你:
常量128与'char'类型表达式的比较始终为false [-Werror,-Wautological-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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.