计算机与串口通信的算术和

时间:2010-01-06 16:23:24

标签: c++ checksum

我正在通过串口与机器通信。协议通信规范的一部分指出控制和是“来自<'PS'>(包括)的字节的算术和,<'data'>到<'CS'>”

数据包消息的结构如下:

<'PS'><'data'><'CS'>,其中:

< 'PS' > - 数据包大小

长度:1

值:0x02至0x63

最大数据包长度为99字节

< '数据' > - 数据

长度:1 ... 90字节

值:0x00 - 0xFF

数据部分的长度取决于命令。

< 'CS' > - 检查总和

长度 - 1个字节

值:0x00 - 0xFF

示例:

ACK数据包:0x02 0x01 0x03 其中0x03是校验和。

那么如何在C ++中计算这些字节的校验和呢?

2 个答案:

答案 0 :(得分:1)

看起来校验和是一个简单的总和,模数为256。

int sum = 0;
for (int j = 0;  j < number_of_bytes_in_message;  ++j)
   sum += message [j];

sum %= 256;  // or, if you prefer  sum &= 255;

答案 1 :(得分:1)

使用无符号8位类型(uint8_t或unsigned char)作为累加器,在生成数据包时将每个字节添加到它,然后将其作为校验和字节发送。究竟如何取决于您打算如何构建数据包。