C - 将字符显示为十六进制

时间:2016-03-13 02:46:05

标签: c char hex printf

我想以十六进制打印char的ASCII码;例如,

A5

我想在控制台上打印char a = 0xA5; printf("%02X", a); 。这是我尝试过的:

FFFFFFA5

但我得到file1。我怎么能解决这个问题?

2 个答案:

答案 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);

并且编译器将了解如何处理您的数据。