在C中,十六进制打印char型数据经常用到
常见的做法是
-
#include <stdio.h>
-
-
int main(int argc, char **argv)
-
{
-
char c = 0x12;
-
-
printf("%02x\n", c);
-
-
return 0;
-
}
上面的代码看似正确,但是只是在当c小于0x80的时候是正确的,
因为%x格式化的类型是int或unsigned int, 所以c会被提升为int,
当c大于等于0x80时会被当作负数处理,为保留符号位,因此提升时
c会变为0xffffff80, 显然不正确
正确的打印方法如下:
-
#include <stdio.h>
-
-
int main(int argc, char **argv)
-
{
-
char c = 0x80;
-
-
printf("%02x\n", (unsigned char)c);
-
-
return 0;
-
}
或者
-
#include <stdio.h>
-
-
int main(int argc, char **argv)
-
{
-
char c = 0x80;
-
-
printf("%02hhx\n", c);
-
-
return 0;
-
}
亦或者
-
#include <stdio.h>
-
-
int main(int argc, char **argv)
-
{
-
char c = 0x80;
-
-
printf("%02x\n", c & 0xff);
-
-
return 0;
-
}
阅读(12318) | 评论(1) | 转发(0) |