案例 十六进制 大小端 协议

下面这个是协议, 

协议是小端模式,一共有8个字节:

 

 然后校验和计算的是前7个字节的数据.

数据0,数据1: 两个共同组成16位的有符号型数据.

数据2,数据3:两个共同组成16位的有符号型数据.       

且都是小端模式,如果你用的单片机是stm32,那单片机的架构也是小端模式,就可以直接读取和写入.

下面是采集的一些数据:

 

如何从这些十六进制的数据中得到相应的十进制数据.

比如:上面图片中的一条数据: DD CC 02 2E 02 20 02 FD 这里是一组数据,

然后 2E 02是两个十六进制数据,它代表的是558

计算方法是:

 

上面的代码是这样的:因为读出来的十六进制是 0x2e, 0x02

又因为协议是小端,所以, 0x02是高8位; 0x2e是低8位;

然后上面程序中 %hd 输出的是 short 格式的.

 

关于校验和:

某个位置: DD CC 05 1E F8 4F FD 10
某个速度: DD CC 03 95 00 00 00 41

用上面的程序 把 0x1e 0xf8 带进去是:-2018

把0x95 0x00带进去是得到:-107

关于校验和,需要DD CC 05 1E F8 4F FD进行校验和,最后应该得到的是0x10

校验和采用的是CheckSum方法.

比如:

 

下面还有一个问题,如何把十进制,转换成16进制的指令:

short rate=10;

str[3]=(char)(rate&0xff);

str[4]=(char)((rate>>8)&0xff)

 

posted @ 2020-11-30 09:31  GXTon  阅读(1088)  评论(0编辑  收藏  举报