我知道在使用%x和printf()时,我们要从堆栈中打印4个字节(十六进制的int )。但我只想打印一个字节。有办法这样做吗?
发布于 2017-01-13 16:04:32
假设:您希望打印一个1字节宽的变量的值,即char。
如果您有一个char变量(例如,char x = 0; )并希望打印值,请在printf()中使用%hhx格式说明符。
有点像
printf("%hhx", x);否则,由于默认的参数提升,下面的语句如下
printf("%x", x);也是正确的,因为printf()不会从堆栈中读取sizeof(unsigned int),因此x的值将根据它的类型读取,并且无论如何它将被提升到所需的类型。
发布于 2017-01-13 15:49:13
您需要小心如何做到这一点,以避免任何未定义的行为。
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)。
发布于 2018-10-02 00:50:23
可以使用以下解决方案使用printf打印一个字节
unsigned char c = 255;
printf("Unsigned char: %hhu\n", c);https://stackoverflow.com/questions/41638330
复制相似问题