协议校验和

时间:2012-09-06 05:03:47

标签: c protocols

我有格式的onr协议

\003LLCCDDDD..DDXX
  • LL:不包括注意字节的总包长度。
  • CC:命令代码。
  • DD:数据字节(以十六进制ASCII格式)。
  • XX:LLCCDDDD..DD的校验和(它不包括注意字节或校验和本身)。校验和是命令包中ASCII字符的简单8位求和。

这是一个例子:

Command:    “\0030611C8”    (Length=6, command=0x11, checksum=0xC8)

我只想知道校验和如何成为0xC8 thnx:)

2 个答案:

答案 0 :(得分:5)

正如您对协议的描述所述,校验和是不是注意字节或校验和的字节总和。总共有7个字节的传输:

'\003', '0', '6', '1', '1', 'C', '8'

其中,\003是注意字节,因此它不包含在校验和中。同样,最后两个字符校验和,并且不包括在内。您的示例只留下4个字符:

'0', '6', '1', '1'

将这些字符转换为十六进制表示(检查ASCII table)以使其更易于添加,从而得出以下结果:

0x30, 0x36, 0x31, 0x31

然后将这些值一起添加并获取:

0xC8

您正在寻找的答案是什么!

答案 1 :(得分:1)

这是我的猜测:

你的校验和目标代码是0611

让我们这样做:

ASCII(0)= 48,ASCII(6)= 54,ASCII(1)= 49;

得到4个ASCII的总和是200 = 0xC8