新手,对检验和一点都不懂,谁帮我弄一个函数。

2019-12-27 18:46发布

最近在弄一个SMT8L串口通信,从机的供应商给出了数据包的格式,10bit 异步转输方式。

数据包的格式以下:


  
          1Byte    1Byte         1Byte         1Byte         1Byte         1Byte   1Byte
        0x22           0xee          len            CMD_H        CMD_L        Data             CS
                                                       
1        0x22,0xee 数据包引导头。                                               
2        Data 域的总长度                                               
3        CMD  命令 由两字节组成                                               
4        CS 数据包的校验和字节                                               
                                                       
        计算方式以下:                                               
         CS= 0-(Len+CMD_H+CMD_L+Data[0]+… +Data[N-1]                                               

这个验验和字节,如何弄,函数应怎么写。

没弄过,谁帮个忙。。
6条回答
dykwai1
1楼 · 2019-12-28 12:26.采纳回答
这么简单的东西,还是自己弄吧,上网学学就会了,要不然还是不要做这一行了
zouzhichao
2楼-- · 2019-12-27 23:00
  1. uint8_t fun(const uint8_t* src) {
  2.         uint8_t cnt, sum;
  3.         uint16_t cmd;
  4.         if (0x22 != *src++) {
  5.                 return 0xff;
  6.         }
  7.         if (0xee != *src++) {
  8.                 return 0xff;
  9.         }
  10.         cnt = *src++;
  11.         cmd = (uint16_t)(*src++);
  12.         cmd <<= 8;
  13.         cmd |= (uint16_t)(*src++);
  14.         for (sum = 0; cnt != 0; cnt--) {
  15.                 sum += *src++;
  16.         }
  17.         sum += *src;
  18.         return sum;
  19. }
复制代码
zouzhichao
3楼-- · 2019-12-28 04:01
一个个相加不会么?
xuzhiping9889
4楼-- · 2019-12-28 05:25
貌似没有比校验和更简单的校验了吧
zouzhichao
5楼-- · 2019-12-28 10:24
 精彩回答 2  元偷偷看……
josonxie
6楼-- · 2019-12-28 17:31
感谢大家的帮忙!

一周热门 更多>