首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用printf打印1字节?

如何用printf打印1字节?
EN

Stack Overflow用户
提问于 2017-01-13 15:44:58
回答 4查看 111.4K关注 0票数 17

我知道在使用%xprintf()时,我们要从堆栈中打印4个字节(十六进制的int )。但我只想打印一个字节。有办法这样做吗?

EN

回答 4

Stack Overflow用户

发布于 2017-01-13 16:04:32

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

如果您有一个char变量(例如,char x = 0; )并希望打印值,请在printf()中使用%hhx格式说明符。

有点像

代码语言:javascript
复制
 printf("%hhx", x);

否则,由于默认的参数提升,下面的语句如下

代码语言:javascript
复制
  printf("%x", x);

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

票数 24
EN

Stack Overflow用户

发布于 2017-01-13 15:49:13

您需要小心如何做到这一点,以避免任何未定义的行为。

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

代码语言:javascript
复制
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)。

票数 9
EN

Stack Overflow用户

发布于 2018-10-02 00:50:23

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

代码语言:javascript
复制
unsigned char c = 255;
printf("Unsigned char: %hhu\n", c);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41638330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档