这个问题在这里已有答案:
有没有理由选择
printf("%hhx", foo);
过度
printf("%x", foo);
这里foo是一个unsigned char。我已经进行了一些测试,看起来它们可以互换,是不是真的如此?如果是这样,在考虑到便携性时应该使用哪一个?
在unsigned char foo
的具体情况中,没有区别。如果您尝试过:
#include <stdio.h>
int main(void)
{
signed char bar = '\xFF';
unsigned char foo = '\xFF';
printf("%hhx %x\n", bar, bar);
printf("%hhx %x\n", foo, foo);
return 0;
}
你通常得到输出:
ff ffffffff
ff ff
原因是在两种情况下,当字符传递给int
时,字符将转换为printf()
,但有符号的字符将转换为负int
,然后当长度修饰符为unsigned char
时将其转换为hh
并保留当省略长度修饰符时,全尺寸(4个字节,我假设)。