【问题标题】:4 byte checksum, sum32 algorithm4字节校验和,sum32算法
【发布时间】:2014-03-13 23:27:34
【问题描述】:

我正在与 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 算法,但我找不到它的任何示例或如何对其进行编程。

谢谢!

【问题讨论】:

    标签: checksum low-level


    【解决方案1】:

    哇,这是一个s***算法!如果其他人发现自己试图理解 Epson 糟糕的低级通信手册,这就是校验和的完成方式:

    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 的校验和)。

    注意:它工作得很好,但由于某种原因,我上面发布的示例似乎不太匹配......它们都是打印机的响应,但是在它遇到硬件问题并且帽子需要通过技术重新格式化之后支持,所以也许它已经修复了。

    我希望它对某个地方的人有所帮助。

    【讨论】:

    • 感谢您发布您的答案!
    • 另一种看待这个问题的方法是将结果总和分开并将其每个数字解释为 ASCII 字符,然后以四个 ASCII 零为基数,将结果求和并转换为十六进制。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2012-08-27
    相关资源
    最近更新 更多