人本善良

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

单双字反转

在嵌入式或底层开发中,数据在传输过程中可能需要调整字节顺序,通常以双字(32位)或单字(16位)为单位进行反转。这种操作通常用于适配不同的字节序(大小端)或协议格式。

以下是对 单字反转 和 双字反转 的原理及详细举例:


1. 单字反转(BADC)

原理:
单字反转是以 16位(2字节) 为单位,将每个单字内部的两个字节交换。

举例:
假设有一段数据 resTemp

text
resTemp = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]
  • 每两个字节为一个单字:
    单字 1:0x01, 0x02
    单字 2:0x03, 0x04
    单字 3:0x05, 0x06
    单字 4:0x07, 0x08

反转后:

text
res = [0x02, 0x01, 0x04, 0x03, 0x06, 0x05, 0x08, 0x07]

代码解释:

csharp
res[0] = resTemp[6]; // 原倒数第2个单字的高字节 res[1] = resTemp[7]; // 原倒数第2个单字的低字节 res[2] = resTemp[4]; // ... res[3] = resTemp[5]; ...

2. 双字反转(CDAB)

原理:
双字反转是以 32位(4字节) 为单位,将每个双字内部的两个单字进行交换。

举例:
假设有一段数据 resTemp

text
resTemp = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]
  • 每四个字节为一个双字:
    双字 1:0x01, 0x02, 0x03, 0x04
    双字 2:0x05, 0x06, 0x07, 0x08

反转后:

text
res = [0x03, 0x04, 0x01, 0x02, 0x07, 0x08, 0x05, 0x06]

代码解释:

csharp
res[0] = resTemp[1]; // 原第一个双字的高位单字的高字节 res[1] = resTemp[0]; // 原第一个双字的高位单字的低字节 res[2] = resTemp[3]; // 原第一个双字的低位单字的高字节 res[3] = resTemp[2]; // 原第一个双字的低位单字的低字节 ...

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;

 

posted on   简简单单2018  阅读(12)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示