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

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

    关注

    5186

    文章

    20161

    浏览量

    329028
  • 编程
    +关注

    关注

    90

    文章

    3708

    浏览量

    96777

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    用于各种设备协议间做报文转换的网关是什么

    功能是实现不同协议格式的报文(数据)在传输过程的解析、转换和转发。 一、协议转换网关的核心作用
    的头像 发表于 08-11 14:08 652次阅读
    用于各种设备<b class='flag-5'>协议</b>间做报文<b class='flag-5'>转换</b>的网关是什么

    Modbus协议转换:让工业设备轻松“对话”

    在工业自动化,Modbus协议是设备通信的关键。本文将聚焦于Modbus协议的串口与网口转换需求,并通过ZLG致远电子PXB-6030D的案例,展示如何轻松
    的头像 发表于 07-15 11:47 466次阅读
    Modbus<b class='flag-5'>协议</b><b class='flag-5'>转换</b>:让工业设备轻松“对话”

    Ethernet IP转Modbus网关在热泵机组协议转换技术实现

    ,例如空调热泵机组的控制与监控,我们可能需要将这两种协议进行转换,此时便需要借助开疆智能Ethernet IP转Modbus网关KJ-EIP-101来实现数据和控制信号的无缝对接。来了解一下
    的头像 发表于 06-04 17:22 388次阅读
    Ethernet IP转Modbus网关在热泵机组<b class='flag-5'>中</b>的<b class='flag-5'>协议</b><b class='flag-5'>转换</b>技术<b class='flag-5'>实现</b>

    Profinet转DeviceNet网关协议转换的技术实现与应用分析

    Profinet网关模块之Profinet从站转DeviceNet主站协议转换方案说明,如下: 石家庄某生产车间内,原有现场设备包含配备了DeviceNet通讯卡的艾默生变频器、AB的软启动器,它们
    的头像 发表于 05-29 09:16 546次阅读
    Profinet转DeviceNet网关<b class='flag-5'>协议</b><b class='flag-5'>转换</b>的技术<b class='flag-5'>实现</b>与应用分析

    使用FX3测试程序的数据流时,遇到了每8个字节重复的场景,是什么原因导致的?

    我在使用 FX3 测试程序的数据流时,遇到了每 8 个字节重复的场景。
    发表于 05-21 06:59

    CANFD协议转换器:搭建通讯桥梁

    局域网络灵活数据速率)协议与其他协议进行转换,以便在物联网环境实现设备之间的互联互通。近期发现了两款产品USR-CAN315(CANFD转
    的头像 发表于 04-19 09:48 684次阅读
    CANFD<b class='flag-5'>协议</b><b class='flag-5'>转换</b>器:搭建通讯桥梁

    EtherNet/IP转Modbus借助网关模块达成罗克韦尔PLC和变频器协议转换通信

    在工业自动化生产环境,空压机作为重要的气源设备,其稳定运行和有效监控对于整个生产流程至关重要。然而,不同厂家生产的空压机可能采用不同的通信协议,这给集中监控和管理带来了挑战。在本次案例,我们
    的头像 发表于 03-10 11:02 684次阅读
    EtherNet/IP转Modbus借助网关模块达成罗克韦尔PLC和变频器<b class='flag-5'>协议</b><b class='flag-5'>转换</b>通信

    EtherNet/IP转Modbus网关模块在罗克韦尔PLC与Modbus上位机协议转换通讯的实战案例

    在工业自动化控制系统,常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例,客户现场采用了 AB PLC,但需要控制的变频器仅支持 Modbus
    的头像 发表于 03-04 09:13 709次阅读
    EtherNet/IP转Modbus网关模块在罗克韦尔PLC与Modbus上位机<b class='flag-5'>协议</b><b class='flag-5'>转换</b>通讯<b class='flag-5'>中</b>的实战案例

    EtherNet/IP转Modbus借协议转换网关模块打通罗克韦尔PLC与上位机链路

    在工业自动化控制系统,常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例,客户现场采用了 AB PLC,但需要控制的变频器仅支持 Modbus
    的头像 发表于 03-01 11:07 722次阅读
    EtherNet/IP转Modbus借<b class='flag-5'>协议</b><b class='flag-5'>转换</b>网关模块打通罗克韦尔PLC与上位机链路

    EtherCAT转modbus TCP借协议转换网关模块打通倍福PLC与上位机链路

    在智能工厂,需要把EtherCAT 设备的数据发送到modbus协议的scada系统。因为主要是modbus协议,EtherCAT设备不能直接接入到系统。EtherCAT
    的头像 发表于 03-01 11:06 765次阅读
    EtherCAT转modbus TCP借<b class='flag-5'>协议</b><b class='flag-5'>转换</b>网关模块打通倍福PLC与上位机链路

    labview数据类型与PLC 数据类型之间的转换(来自于写入浮点数到汇川 PLC的数据转换关键的修改)

    为32位无符号整型U32 2、将U32拆分为两个U16,分高低位写入PLC 3、在PLC,将低位寄存器设置为浮点数数据类型 4、结果:PLC中一直无法正确转换。 原因及解决方法: 1
    发表于 02-24 19:01

    ADS5271往serial interface registers输入数据遇到的疑问求解

    往 serialinterface registers 输入数据。先填充哪个寄存器,以及高低位。 顺便介绍一下: Deskew pattern, Sync patter,custom
    发表于 02-14 06:17

    浅谈CAN协议转换模块

    转换模块实现数据在不同系统间的无缝传输,提升系统的灵活性和可扩展性。 一、基本概念 CAN协议转换模块,简而言之,将CAN总线上的数据转换
    的头像 发表于 02-05 16:37 752次阅读

    协议转换器是什么设备,协议转换器指示灯含义

    协议转换器,简称协转,也称为接口转换器,是一种用于网络通信的设备。它的主要作用是在不同的通信网络,将采用不同高层协议的主机进行连接,使它们
    的头像 发表于 01-29 11:51 3158次阅读

    ADS1246实现单输入模拟信号的模数转换,在电路搭建遇到问题

    我想用ADS1246实现单输入模拟信号的模数转换,在电路搭建遇到以下问题:1、双向参考端(REFP、REFN)怎么使用; 2、SCLK、CLK,如何选择; 3、串入端口(DIN)不使用时,能否置空; 4、模拟供电和数字供电,接
    发表于 01-21 09:07