我正在處理來自一個串行硬件的6字節消息。 在他們的手冊中,製造商已經規定每個消息(第6個字節)的校驗和是由'消息其餘部分的總和的低字節'組成的。我的5字節數據校驗和不是
Here is one of their examples, dissected
我還沒有嘗試過所有這些例子還沒有,讓我帶的第一個「解剖」例如我的工作:
這是公式提供:
Low byte of 0xB2 + 0x00 + 0x69 + 0x1A + 0x83 = 0x68
所以,總和是0x1B8,如果我把第一個8-b它,我得到0xB8 嗯...我做錯了嗎?
我想了一下,猜測,哦,也許他們只是做一個按位操作,而這在老的硬件上很常見? 所以我寫了每一部分的比特和異或系列一起...
- 0xB2^0×00 = 0xB2(杜)
- 0xB2^0×69 =位於0xDB
- 位於0xDB^0x1A的= 0xC1
- 0xC1^0×83 = 的0x42
我的手這樣做,並通過計算器。同樣的結果。
我能夠在我的程序中重現我的計算,我的校驗和與硬件輸出的不同。手冊型號與我所擁有的硬件相匹配...
查看求和的每個部分的二進制數,我不確定我能看到每個他們記錄的輸出的清晰模式。在一些校驗和中,如IPv4頭,進位被移位或加回到校驗和中,這可能是這種情況嗎?
我的問題是:
上午我在做這個校驗和是如何被計算的數學錯誤?
任何幫助將不勝感激!謝謝。
是的,有一位同事也想出了這個。不幸的是,硬件也出現了錯誤,但一直保持不變。我只是假設規範中的某些內容發生了更改,並且文檔已過時。 – WolverineOfLove 2013-05-09 23:12:23