单双字反转
在嵌入式或底层开发中,数据在传输过程中可能需要调整字节顺序,通常以双字(32位)或单字(16位)为单位进行反转。这种操作通常用于适配不同的字节序(大小端)或协议格式。
以下是对 单字反转 和 双字反转 的原理及详细举例:
1. 单字反转(BADC)
原理:
单字反转是以 16位(2字节) 为单位,将每个单字内部的两个字节交换。
举例:
假设有一段数据 resTemp
:
- 每两个字节为一个单字:
单字 1:0x01, 0x02
单字 2:0x03, 0x04
单字 3:0x05, 0x06
单字 4:0x07, 0x08
反转后:
代码解释:
2. 双字反转(CDAB)
原理:
双字反转是以 32位(4字节) 为单位,将每个双字内部的两个单字进行交换。
举例:
假设有一段数据 resTemp
:
- 每四个字节为一个双字:
双字 1:0x01, 0x02, 0x03, 0x04
双字 2:0x05, 0x06, 0x07, 0x08
反转后:
代码解释:
3. 对比
操作类型 | 单位 | 原始数据 | 结果数据 |
---|---|---|---|
单字反转 | 16位(2字节) | [01, 02, 03, 04, 05, 06, 07, 08] |
[02, 01, 04, 03, 06, 05, 08, 07] |
双字反转 | 32位(4字节) | [01, 02, 03, 04, 05, 06, 07, 08] |
[03, 04, 01, 02, 07, 08, 05, 06] |
总结
- 单字反转(BADC): 是对每个 16位 的单元内部字节顺序调换。
- 双字反转(CDAB): 是对每个 32位 的单元内的两个单字顺序调换。
这些操作的目的是适应不同的协议要求或大小端序的差异。在实际应用中,需要根据协议或目标设备要求选择合适的反转方式。
case DataFormat.BADC: //按照单字反转 单字反转 单个相邻两个寄存机交换位置
res[0] = resTemp[6];
res[1] = resTemp[7];
res[2] = resTemp[4];
res[3] = resTemp[5];
res[4] = resTemp[2];
res[5] = resTemp[3];
res[6] = resTemp[0];
res[7] = resTemp[1];
break;
case DataFormat.CDAB: //按照双字反转 双个相邻两个寄存机交换位置
res[0] = resTemp[1];
res[1] = resTemp[0];
res[2] = resTemp[3];
res[3] = resTemp[2];
res[4] = resTemp[5];
res[5] = resTemp[4];
res[6] = resTemp[7];
res[7] = resTemp[6];
break;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本