news 2026/8/1 11:18:15

大端小端踩坑——协议结构体不能直接cast

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大端小端踩坑——协议结构体不能直接cast

一句话: 大端协议的帧数据不能直接 cast 成结构体指针——ARM 是 Little-Endian,读uint16会高低字节反转。正确做法是从字节数组逐字节提取。

适合谁读:串口/SPI/I2C 收到数据后直接*(uint16_t*)pBuf读值的嵌入式开发者。

现象

协议用 Big-Endian 传两字节的控制 ID。帧里是0x00 0x62(=十进制的 98)。

// 错误写法:直接 cast 结构体 CTRL_MSG *pMsg = (CTRL_MSG *)u8Frame; uint16_t id = pMsg->control_id; // 读出来不是 98!

ARM 是 LE——低地址字节当低位。u8Frame[5]=0x00u8Frame[6]=0x62→ LE 拼成0x6200=25088。完全不是 98。

正确做法

// 从字节数组逐字节提取 Big-Endian uint16 uint16_t id = ((uint16_t)u8Frame[5] << 8) | u8Frame[6]; // 0x0062 = 98

不依赖处理器字节序。不管 ARM LE 还是其他 BE——手动拼接的结果是确定的。

发送方向也检查

发送代码通常已经是大端输出(>>8 | &0xFF),但如果是结构体赋值→memcpy 到发送 buffer——同样的坑。发送用pMsg->id = 98; memcpy(buf, &pMsg, len)→ 线路上收到的是 LE 序。


有用的话点个收藏,下次调试直接用。有问题欢迎评论区交流,看到了都会回。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/1 11:13:57

计算机毕业设计之宠物商场APP的设计与实现

由于移动应用技术的持续性的快速发展&#xff0c;现实生活中人们大多数都是通过移动手机、电脑等智能设备来完成生活中的事务。因此&#xff0c;许多的人工传统行业也开始与互联网结合&#xff0c;不再一味的依靠人工手动&#xff0c;努力打造半自动数字化甚至是全自动数字化模…

作者头像 李华
网站建设 2026/8/1 11:13:04

UE4中移植ShaderToy镜头光晕:从GLSL到HLSL的完整实战指南

1. 项目概述&#xff1a;为什么要在UE4里折腾ShaderToy的光晕&#xff1f; 做实时渲染的朋友&#xff0c;尤其是玩UE4的&#xff0c;对“镜头光晕”&#xff08;Lensflare&#xff09;这个效果肯定不陌生。它模拟的是强光源进入相机镜头后&#xff0c;在镜片组内部发生多次反射…

作者头像 李华
网站建设 2026/8/1 11:10:28

苏州吴中注册公司专业推荐

苏州吴中注册公司专业推荐&#xff1a;花桥好账本吴炜团队服务报道吴中区是苏州重要的创业聚集区域&#xff0c;越溪、木渎、城南开发区等地聚集大量初创企业&#xff0c;工商注册审批标准高、地址审核严格、经营范围规范要求多&#xff0c;很多创业者自行办理屡屡被驳回。花桥…

作者头像 李华
网站建设 2026/8/1 11:10:05

Python自动化神器pynput:键盘鼠标控制与监听全解析

1. 项目概述&#xff1a;为什么我们需要pynput&#xff1f;在自动化办公、游戏脚本辅助或者软件测试这些场景里&#xff0c;我们经常需要程序能像真人一样操作电脑。比如&#xff0c;自动填写表单、定时点击某个按钮、录制并回放一系列操作&#xff0c;甚至是开发一个简单的宏命…

作者头像 李华
网站建设 2026/8/1 11:08:12

16、磁场、毕萨定律、高斯磁场定律

1.历史 人们早就发现自然界存在磁石&#xff0c;中国拿它来制造司南等指南针器具。1600年&#xff0c;英国科学家威廉⋅\cdot⋅吉尔伯特 出版《论磁》&#xff0c;首次将地球本身视为一个巨大磁体&#xff0c;解释了磁针指向南北的原因。1820年&#xff0c;丹麦物理学家奥斯特 …

作者头像 李华