2014-03-13 146 views
1

我正在用Linux设备(仅接收十六进制软件包)与Epson tm-t88iv热敏打印机进行低级别通信编程。我已阅读手册,试图了解如何构建校验和,但我无法设法重新创建它。4字节校验和,sum32算法

手册中说校验和是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

哇,这是一个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)。

注意:它的工作完美,但由于某种原因,我上面发布的示例看起来并不匹配太多......它们都是打印机的响应,但稍微有一个硬件问题和帽子后通过技术支持重新格式化,所以也许它已经修复。

我希望它能帮助别人。

+0

谢谢你发布你的答案! – problemPotato

+0

另一种方法是查看结果并将结果的每个数字解释为ASCII字符,然后基数为四个ASCII零,将结果相加并转换为十六进制。 – BVJ