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】欢迎添加关注!文章转载请注明出处。

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

    关注

    5071

    文章

    19026

    浏览量

    303489
  • 编程
    +关注

    关注

    88

    文章

    3596

    浏览量

    93609

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

    BL121网关作为Modbus转OPC UA的协议转换设备,在工业自动化系统具有广泛的应用前景。借助Modbus转OPC UA网关,可以实现Modbus设备与WinCC系统间的数据交
    的头像 发表于 08-09 17:31 319次阅读
    钡铼<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协议网关设备来实现。钡铼的BL120AC网关就能实现空调
    的头像 发表于 08-06 13:40 392次阅读
    空调<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 662次阅读
    Modbus网关<b class='flag-5'>实现</b>Modbus RTU和Modbus TCP<b class='flag-5'>协议</b>相互<b class='flag-5'>转换</b>

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

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

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

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

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

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

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

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

    EtherCAT协议与ModbusRTU协议在能源行业的应用

    通讯协议时,需要根据具体的场景和需求进行选择,以满足不同的通讯需求。在能源行业,EtherCAT和Modbus RTU的转换使用需要考虑以下几个方面: 通讯协议
    发表于 12-22 13:52

    从Profinet到CCLink:工业通信协议转换实践

    转换,以实现设备之间的通信。本文将介绍从Profinet协议转换到CCLink协议的实践过程。 在某些情况下,我们需要将Profinet
    发表于 12-15 14:26

    关于EthernetIP转ModbusTCP协议转换的成熟应用

    将不同设备之间的通信协议进行转换实现数据的传输和共享。 智能楼宇系统:智能楼宇系统涉及到多种不同品牌和类型的设备,包括空调、照明、安防等。通过使用Ethernet/IP转Modbu
    发表于 12-13 17:26

    工业通讯CANOPEN转EtherCAT的转换

    、MDI/MDIX自检测,可以组成链式网络,支持环网冗余。在PDO长度方面,inputs和outputs各为256字节。该网关还具有智能协议转换功能,可以将串行数据作为易于处理的I/O数据呈现给
    发表于 12-12 11:31

    Modbus转CANopen协议相互转换在工业的作用

    于汽车和工业自动化领域。在某些应用,可能需要将Modbus协议转换为CANopen协议。这可以通过使用专门的Modbus转CANopen协议
    发表于 12-08 17:02

    Modbus转CANopen协议相互转换在工业的作用

    于汽车和工业自动化领域。在某些应用,可能需要将Modbus协议转换为CANopen协议。这可以通过使用专门的Modbus转CANopen协议
    的头像 发表于 12-08 16:58 448次阅读
    Modbus转CANopen<b class='flag-5'>协议</b>相互<b class='flag-5'>转换</b>在工业<b class='flag-5'>中</b>的作用