`
923723914
  • 浏览: 635394 次
文章分类
社区版块
存档分类
最新评论

通信协议中多字节数据的解析

 
阅读更多

在自定义通信协议中,如果采用字节流形式的的方式。就特别注意多字节数据的解析。此处以整形数据为例进行讲解。

例如:通信协议中规定整个数据帧长度为整形,占用两个字节。

则数据帧长度257转化为字节数组为:byte[0]=2,byte[1]=1,发送数据时先发送字节byte[0],再发送字节byte[1]

则在服务端解析时,计算的数据的正确方式就是byte[0]+byte[1]*256=258,错误的为byte[0]*256+byte[1]=513

相反如果客户端先发送byte[1],在发送byte[0],则在服务端解析式的正确方式就是byte[0]*256+byte[1]=258,错误的为byte[0]+byte[1]*256=513

如果这些细节没有严格规定,就会导致解析错误。

这些都是需要注意的细节,虽然琐碎,但不注意却会导致解析失败。

因此字节流通信协议双方必须严格按照通信协议处理数据。通信协议必须规定每一个字节的含义,以及多字节数据的存储顺序,否则就会导致解析错误。


几个常用的数值转换字节数组的函数:

 
        /// <summary>
        /// 把数字转化为数组 地位存低字节,高位存高字节

        /// </summary>
        /// <param name="x"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        static byte[] IntToBytes(int x, int length)
        {
            byte[] b = new byte[length];
            int temp = x;
            for (int i = 0; i <= length - 1 && i < 4; i++)
            {
                b[i] = (byte)((x >> (i * 8)));
            }
            return b;
        }
        /// <summary>
        ///把数组转化为数字  解析地位存低字节,高位存高字节

        /// </summary>
        /// <param name="b"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        static int BytesToInt(byte[] b, int length)
        {
            int temp = 0;
            for (int i = 0; i <= length - 1 && i < 4; i++)
            {
                temp += (int)(b[i] << (i * 8));
            }
            return temp;
        }


分享到:
评论

相关推荐

    帧数据处理_数据帧_帧数据处理_数据协议解析_

    数据帧处理,对于通信协议内容进行解析,能实时获得数据

    Windows Sockets 编程及UR机器人通信数据解析代码

    用于UR机器人的通信及通信数据解析,内容包括完整的Windows Sockets编程,以及UR机器人的通信协议解析、字节顺序变换等。

    根据协议描述文件自动解析实时数据

    为了方便在开发过程中测试通信协议的数据而不重复开发上位机软件,我们开发了这款软件。我们使用XML文件来描述通信协议的内容,通过读取XML协议文件则可以实时解析串口或UDP接收到的数据帧。(注:目前版本仅支持...

    labview UDP TCP通讯协议解析之字符串截断为字节

    labview UDP TCP通讯协议解析之字符串截断为字节,便于进行协议解析

    uart数据协议解析(一)

    uart数据解析,针对串口通信的数据进行解析,每次读一个字节,首先寻找协议包头;中断调用或者while(1)调用;

    以太网帧解析程序

    完整的以太网帧解析程序,使用C++完成,可直接运行,内含程序源码与说明文档。

    数字对讲通信协议

    一、 系统结构 二、基本网络设置 三、 通信流程 四、 音视频格式 ...通信协议地址编码采用20字节方便以后升级,目前总共12字节,以ASCII码表示,其中第1字节内部使用,即实际供用户输入的最多11字节。 室内机

    通用16 进制协议解析类型

    通用16 进制解析类型,包含大小端,字符串,数组,字节,无符号整数,有符号整数,二进制等转换

    单片机与DSP中的单片机通信协议处理

    在这个层面上,底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全部建立在这两个操作方法之上。通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧...

    水文监测数据通信规约SL651-2014

    水温监测数据通通信规约,水利行业工作必备,水利行业产品开发及服务器接入需要满足该数据规约的条件

    字节流数据自动分割工具

    基于QT 的字节流分割工具; (1)通过记载EXCEL 表格中字节格式,读取为配置信息; (2)数据字节流,根据配置信息,按配置信息中字节占位情况,自动解析数据;...主要用于嵌入时设备,通信数据的协议解析,便于开发;

    BMD101通讯协议详解

    数据包以异步串行字节流方式发送。每个数据包的开始包含报头,接着是Data Payload,以CRC...数据Payload字节的解释被定义在下文的“Data Payload格式”中有详细介绍。注意Data Payload应该在[CRC]字节收到前进行校验。

    通信原理:设计一个基带数据发送终端

    设计终端的硬件,包括单片机最小系统,RS—485接口、RS-422接口以及RS-232等通信接口电路(三种接口可...要求设计通信协议,包括帧头、数据长度、数据、校验字节及帧尾,并编程; 数据校验可采用和校验或者CRC校验。

    CAN消息打包解包软件 CAN Message Pack &Unpack Tool. 解析CAN信号,支持MotorolaLSB

    CAN通信:CAN是一种串行通信协议,用于在汽车电子和工业控制系统中传输数据。它具有高可靠性、抗干扰能力强等特点,广泛应用于现代汽车中的各种电子控制单元(ECU)之间的通信。 数据打包和解包:在通信中,

    基于单片机EEPROM解析

    I2C 是一个通信协议,它拥有严密的通信时序逻辑要求,而 EEPROM 是一个器件,只是这个器件采样了 I2C 协议的接口与单片机相连而已,二者并没有必然的联系,EEPROM 可以用其它接口,I2C 也可以用在其它很多器件上。

    好用的字节浮点转换小工具

    方便的将字节转换为浮点型变量和将浮点型变量转换为字节,非常适合协议调试过程中进行校正...使用该小工具可以很方便的将协议解析为代码中使用的数据进行对比,否则还得使用系统自带的计算器进行单字节转换十分不方便。

    TCP协议的SOCKET服务器端解析软件

    任何TCP客户端,包括自己写的,或者是浏览器,只要将目的地设置为这个地址,只要发送了数据。软件就会以16进制将所接收到的信息按照字节形式表示出来。之后,你可以用一些16进制转ASCII码的工具软件进行翻译。这个...

    ProtocolAnalysls:电能表DLT645-07的协议解析

    电能表DLT645-07的协议解析 通信方式 usb转485与电表接口直连 通信规约 DLT/645 - 2007 文件说明 两个dll文件是rxtx包所需要的依赖,必须有 注意事项 单相电表不能取电压电流数据块,三相电表可以取电压电流数据块,...

    Afproto:串行数据成帧协议

    仿冒品为嵌入式通信优化的成帧协议。 优化用于简单和有效的编码和解码(每个操作单次通过),并包含一个16位CRC。 从gregHaynes / Afproto分叉仓库布局每个目录都包含用于以特定语言和/或实现来解析协议的源代码。...

    基于Java的XML解析与反射设计模式.doc

    与此同时,b/s结构的多系统相互访问技术应时代的发展也如雨后春笋般不断 涌现出来,相应的多系统间数据交互产生的问题也是越来越多,xml的数据解析与系统业 务逻辑如何融合就是其中比较难以解决的问题之一。...

Global site tag (gtag.js) - Google Analytics