我想以十六进制打印char的ASCII码;例如,
A5
我想在控制台上打印char a = 0xA5;
printf("%02X", a);
。这是我尝试过的:
FFFFFFA5
但我得到file1
。我怎么能解决这个问题?
答案 0 :(得分:2)
将值转换为unsigned char
,然后再次投射到unsigned int
以通过%X
打印。
char a = 0xA5;
printf("%02X", (unsigned int)(unsigned char)a);
请注意,转换为无法存储原始值的有符号整数是实现定义的,但根据N1256 6.3.1.3
定义了转换为无符号整数答案 1 :(得分:1)
"问题"被称为符号扩展 - 参数在默认情况下作为int传递,因此char将被转换为int,并且在此过程中符号扩展意味着添加了额外的f - 使char符号无符号
unsigned char a = 0xA5;
printf("%02X", a);
并且编译器将了解如何处理您的数据。