2014-03-13 121 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