当前位置: 首页 > news >正文

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 0x7f

0xffffffff 0x7f 0xffffffff 0x7f 0xffffffff 0xffffffff

0xffffffff 0xffffffff 0xffffffff 0x7f 0xffffffff 0x7f

0x00 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

相关文章:

  • ubuntu20.04系统安装apollo10.0系统
  • Python-Django+vue二手电子设备交易平台功能说明
  • 系统与网络安全------网络通信原理(1)
  • 微服务面试题
  • 在 STM32 中实现电机测速的方法介绍
  • 职责分配矩阵(RAM)详解
  • GPU显存不足?分布式训练如何让单卡变百卡:PyTorch实战与弹性算力启示
  • 014_多线程
  • 2、文件上传漏洞的防范
  • 12、nRF52XX蓝牙学习(GPIOTE任务触发LED)
  • Python爬虫第11节-解析库Beautiful Soup的使用上篇
  • 安装NVIDIA驱动、配置docker运行时、docker部署GPUStack及ragflow集成GPUStack模型(WSL下ubuntu)
  • uniapp微信小程序基于wu-input二次封装TInput组件(支持点击下拉选择、支持整数、电话、小数、身份证、小数点位数控制功能)
  • iframe学习与应用场景指南
  • 【技术白皮书】外功心法 | 第四部分 | 数据结构与算法基础(常用的数据结构)
  • MySQL之事务理论和案例
  • SQLyog使用教程
  • ASP.NET中将 PasswordHasher 使用的 PBKDF2 算法替换为更现代的 Scrypt 或 Argon2 算法
  • 语音外呼提高CPS转化案例
  • 【教程】优化xrdp的性能
  • 开发网页的常用软件/网站的优化和推广方案
  • 网站首页导航栏怎么做/竞价推广专员
  • 别人帮做的网站怎么修改病句/百度搜索图片
  • 上海市公安网站备案/十大免费无代码开发软件
  • 织梦中查看演示网站怎么做/专业网站优化排名
  • 网站建设开发有什么好处/域名注册后怎么使用