欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > C语言打印的坑

C语言打印的坑

2025/4/19 8:31:07 来源:https://blog.csdn.net/fantasyYXQ/article/details/147111744  浏览:    关键词:C语言打印的坑

使用下面的代码buf

dprt("data: 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);

明明是一个字节一个字节的打,打出来的数据有些却是4个字节

0xffffffff 0xffffffff 0xffffffff 0x7f 0xffffffff 0x7f0xffffffff 0x7f 0xffffffff 0x7f 0xffffffff 0xffffffff0xffffffff 0xffffffff 0xffffffff 0x7f 0xffffffff 0x7f0x00 0x00 0x00 0x00 0x00 0x00

就很奇怪

可能的原因

  1. ch 的类型不匹配
    • 如果 ch 被声明为 char 类型,并且该字符的值在有符号 char 范围内表示为负数(例如,char 是有符号的,并且 ch 的值是 -1),那么在传递给 printf 时,可能会被提升为 int 类型,并进行符号扩展。
    • 在许多实现中,char 默认是有符号的,因此 -1 会被提升为 int 类型的 0xffffffff(在 32 位系统上)。
  2. 格式说明符不匹配
    • %02x 格式说明符期望一个 unsigned int 类型的参数(或至少一个可以隐式转换为 unsigned int 的参数),但 char 类型会被提升为 int
    • 如果 char 是有符号的且为负值,符号扩展会导致不期望的结果。

 解决:

//char* buf = (char*)param1;
uint32_t* data = (uint32_t*)param1;//dprt("data: 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
dprt("data: 0x%08x 0x%08x", data[0], data[1]);

这样打印就正常了

data: 0x837f037e 0x037f037f
data: 0x7e31fe31 Oxfe31fe31
data: Oxf4f674f6 0xf4f6f4f6
data: Ox797af97a 0x797a797a
data: Oxfb737b73 0xfb73fb73
data: 0x84850485 0x84858485

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com