4字节校验和,sum32算法

时间:2014-03-13 23:27:34

标签: checksum low-level

我正在编程与Linux设备上的Epson tm-t88iv热敏打印机进行低级别通信,该设备仅接收十六进制数据包。我已经阅读了手册,试图了解如何构建校验和,但我无法重新创建它。

手册说校验和是4个字节,表示发送包中所有数据的2个字节总和。

我目前有四个工作示例,我通过使用不同的程序监听Windows计算机上的端口。最后4个十六进制是校验和(03表示数据的结尾,并包含在校验和计算中,根据手册)。

02 AC 00 01 1C 00 00 03 30 30 43 45
02 AC 00 00 1C 80 80 1C 00 00 1C 00 00 1C 03 30 32 32 31
02 AD 07 01 1C 00 00 1C 31 30 03 30 31 35 33
02 AD 00 00 1C 80 80 1C 00 00 1C 00 00 1C 03 30 32 32 32

我在某处读过有一个sum32算法,但我找不到它的任何例子或如何编程。

谢谢!

1 个答案:

答案 0 :(得分:2)

哇,这是一个s ***算法!如果其他人发现自己试图理解爱普生可怕的低级别沟通手册,那就是校验和完成的方式:

  1. 校验和基数为30 30 30 30
  2. 以十六进制表示所有数据包的总和(例如,02 + 89 + 00 + 00 + 1C + 80 + 80 + 1C + 00 + 01 + 1C + 09 + 0C + 1C + 03 = 214)
  3. 然后将数字逐位分开,如果它的字母加1(例如B2将是2 | 1 | 4)。
  4. 从右到左从数字加上校验和基数(这将是30 32 31 34的校验和)。
  5. 注意:它工作得很好但是由于某些原因我上面发布的例子看起来并不那么匹配......它们都是打印机的响应,但是在它遇到硬件问题并且需要通过技术重新格式化支持,所以也许它得到了修复。

    我希望它可以帮助某个人。