0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

协议中遇到字节高低位转换的问题如何实现

Q4MP_gh_c472c21 来源:嵌入式ARM 作者:李肖遥 2020-12-06 09:52 次阅读

最近的协议中遇到字节高低位转换的问题,于是偷懒上网查看,遇到类似的问题,也认识一个新的名字,叫做蝶式交换

问题是这样子的

协议要求字节低位在左,高位在右,对每个字节做转换处理,逐个交换其高低位,例如11010001,经过0->7,1->6,2->5,3->4对应位的交换,变成10001011。

这里就需要有位操作的知识,参考位操作运算有什么奇技淫巧?(附源码)

这里我们以8位数据高低位转换为例子:

熟悉位操作,上述代码实现起来就比较简单。在嵌入式开发中这类问题通常使用蝶式交换法和查表法来实现。

高阶实现?

查表法就是将一些值存到内存中,在需要计算的时候查表,但是这种方法会占用额外的存储空间。

所以这里主要介绍一下蝶式交换法,我们以8位数据转换为例。

假设原始序列为:1 2 3 4 5 6 7 8

目标序列为:8 7 6 5 4 3 2 1

那么流程图如下:

由此完成了整个位的逆序转换,同样以11010001为例,下面是具体的实现代码:

交换字节的高低位并不是一个很常见的问题,遇到该问题时,需要经过仔细的分析,加上对C语言位操作的熟练掌握,就能够很好的解决这一类的问题。

扩展

那么我们将其扩展到16位半字数据的高低位转换。

其实原理是跟8位的时候是一样的,采用简单的移位方式对数据的高低位进行转换。熟悉位操作的话代码就相对简单了。

下面是对该思路的具体实现。

同样的所谓的蝶式交换法,我引用了字节交换法的例子,我们可以演算一下:

假设原始序列为:a b c d e f g h i j k l m n o p

目标序列为:p o n m l k j i h g f e d c b a

那么流程图如下:

由此完成了整个位的逆序转换,完成了算法的拓展,以1001011001011011为例,下面是具体的实现代码:

对于这种交换位的问题,在嵌入式开发中会经常遇到,熟悉掌握位操作还有调试手段很重要。熟练的利用好C语言的移位操作,就能快速的解决此类问题。

总结

上面的问题关键还是位操作的灵活妙用,其次是写了两个打印二进制的函数,方便使用,代码可以直接使用,调试不易,欢迎点赞,在看,转发也是厚爱,我们下一期,再见!

责任编辑:xj

原文标题:嵌入式编程中的高低位交换如何实现?

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19126

    浏览量

    305260
  • 编程
    +关注

    关注

    88

    文章

    3616

    浏览量

    93738

原文标题:嵌入式编程中的高低位交换如何实现?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何实现EtherNet/IP与Modbus协议之间转换

    能使用Modbus协议。这种协议的不一致性导致了数据传输的障碍,使得不同设备之间的信息无法有效共享,从而影响了整个系统的运行效率和智能化水平。 难点分析 实现EtherNet/IP与Modbus
    的头像 发表于 11-12 18:05 244次阅读

    探索新一代RS-485协议转换器——MG协议转换

    在工业自动化领域,通信协议的多样性要求设备间能够顺畅地进行数据交换。那么,如何实现不同通信协议之间的对话呢?我们自主研发的MG协议转换器应运
    的头像 发表于 09-06 17:26 440次阅读
    探索新一代RS-485<b class='flag-5'>协议</b><b class='flag-5'>转换</b>器——MG<b class='flag-5'>协议</b><b class='flag-5'>转换</b>器

    用labview实现串口bin文件或hex文件的烧录。bin要用Xmodem协议

    最近遇到项目需要用串口更新程序,mcu已经部署好bootloader来实现。现在就需要用labview来完成文件的传输。现在是头疼这个文件传输应该怎么去实现。读取了bit文件后是直接字符串发送吗,需
    发表于 08-12 15:19

    钡铼协议网关BL121快速实现Modbus协议转OPC UA协议

    BL121网关作为Modbus转OPC UA的协议转换设备,在工业自动化系统具有广泛的应用前景。借助Modbus转OPC UA网关,可以实现Modbus设备与WinCC系统间的数据交
    的头像 发表于 08-09 17:31 371次阅读
    钡铼<b class='flag-5'>协议</b>网关BL121快速<b class='flag-5'>实现</b>Modbus<b class='flag-5'>协议</b>转OPC UA<b class='flag-5'>协议</b>

    使用Modbus、楼宇自控、电力协议转Modbus协议网关实现生产设备的远程监控和管理

    对不同协议设备的可靠数据采集;上行转发协议方面支持Modbus RTU和Modbus TCP,为用户提供灵活的上行通信选择,实现不同协议设备的协议
    的头像 发表于 08-08 17:29 387次阅读
    使用Modbus、楼宇自控、电力<b class='flag-5'>协议</b>转Modbus<b class='flag-5'>协议</b>网关<b class='flag-5'>实现</b>生产设备的远程监控和管理

    空调协议网关快速操作空调协议转换为Modbus协议

    为Modbus协议,则需要一个空调协议转Modbus协议网关设备来实现。钡铼的BL120AC网关就能实现空调
    的头像 发表于 08-06 13:40 454次阅读
    空调<b class='flag-5'>协议</b>网关快速操作空调<b class='flag-5'>协议</b><b class='flag-5'>转换</b>为Modbus<b class='flag-5'>协议</b>

    Modbus网关实现Modbus RTU和Modbus TCP协议相互转换

    ),BL120在GE Digital iFIX里的应用场景主要体现在工业自动化和远程监控控制系统,通过实现Modbus协议之间的相互转换和数据传输,为工业过程的监控和控制提供高效、稳
    的头像 发表于 08-02 15:13 741次阅读
    Modbus网关<b class='flag-5'>实现</b>Modbus RTU和Modbus TCP<b class='flag-5'>协议</b>相互<b class='flag-5'>转换</b>

    钡铼BL122协议转换网关迅速实现Modbus转Profinet

    Modbus 转换为 Profinet 是一种常用的工业通信协议转换技术,旨在实现不同工业设备之间的互联互通,允许不同类型的工业设备通过网络进行数据交换。Modbus 转 Profin
    的头像 发表于 07-12 09:55 322次阅读
    钡铼BL122<b class='flag-5'>协议</b><b class='flag-5'>转换</b>网关迅速<b class='flag-5'>实现</b>Modbus转Profinet

    协议转换网关的功能和应用场景

    ,或者将OPC协议转换为MQTT协议 物通博联推出的协议转换网关支持接入PLC、仪器仪表、传感器、数控机床、工业机器人等设备,
    的头像 发表于 06-18 10:55 512次阅读
    <b class='flag-5'>协议</b><b class='flag-5'>转换</b>网关的功能和应用场景

    通讯协议转换Modbus转Profinet网关

    Modbus转Profinet网关是工业通信转换设备,能够实现Modbus协议与Profinet协议之间的有效转换和稳定传输。通过该网关,工
    的头像 发表于 06-13 14:07 490次阅读
    通讯<b class='flag-5'>协议</b><b class='flag-5'>转换</b>Modbus转Profinet网关

    雷达液位计高低位是什么意思

    雷达液位计的高低位通常指的是液位计在测量过程中所设定或显示的最高液位(高位)和最低液位(低位)。
    的头像 发表于 05-14 16:11 1665次阅读

    怎么将STR7的HDLC协议开始和结束标示改为4字节

    怎么将STR7的HDLC协议开始和结束标示改为4字节,由于项目中的协议,开始标志和结束标志都是4
    发表于 05-11 07:39

    TC387发送I2C数据,SDA引脚卡在低位的原因?

    我在发送 I2C 时遇到了一个奇怪的现象。 SDA 引脚有可能卡在低位。 经过分析,应该是大师下拉SDA。 每次我在 TXD 设置 4 字节,我发布的每一帧都是 255
    发表于 01-23 07:57

    SPI Master RX如何在保持CS低位的情况下从从机接收可变字节数?

    的第二个虚拟字节作出响应,我应该看到命令之后总共传输了 3 个虚拟字节。 但是,我却在代码和逻辑分析器跟踪中看到了 8: 使用调试器,我将问题范围缩小到了 ISR 的这一部分: 遇到
    发表于 01-22 07:30

    工业协议转换网关是什么?有什么功能?

    在工业自动化领域,各种设备和系统间的通信协议十分丰富,对于系统集成和数据交互带来困扰。工业协议转换网关作为一种高效的解决方案,能够实现不同协议
    的头像 发表于 01-05 17:51 596次阅读
    工业<b class='flag-5'>协议</b><b class='flag-5'>转换</b>网关是什么?有什么功能?