如何用printf打印1个字节?

我知道当使用%xprintf()我们从堆栈中打印4个字节(hex的int )。 但我想只打印1个字节。 有没有办法做到这一点 ?

假设:您希望打印1个字节宽度的变量值,即char

如果你有一个char变量说, char x = 0; 并且想要打印该值,使用%hhx格式说明符和printf()

就像是

  printf("%hhx", x); 

否则,由于默认参数提升,一个语句就好

  printf("%x", x); 

也是正确的,因为printf()不会从堆栈中读取sizeof(unsigned int)x的值将根据它的类型被读取,并且它将被提升为所需的类型。

您需要小心如何执行此操作以避免任何未定义的行为

C标准允许您将int转换为unsigned char然后使用指针算法打印您想要的字节:

 int main() { int foo = 2; unsigned char* p = (unsigned char*)&foo; printf("%x", p[0]); // outputs the first byte of `foo` printf("%x", p[1]); // outputs the second byte of `foo` } 

请注意,在显示输出之前, p[0]p[1]将转换为更宽的类型( int )。

如果要打印较大值类型中存在的单个字节,可以屏蔽和/或移出所需的值(例如,int x = 0x12345678; x和0x00FF0000 >> 16)。 或者通过使用(无符号)字符指针和使用偏移量转换所需的字节位置来检索所需的字节。

您可以使用以下解决方案使用printf打印一个字节:

 unsigned char c = 255; printf("Unsigned char: %hhu\n", c);