如何用printf打印1个字节?
我知道当使用%x
和printf()
我们从堆栈中打印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);