我試圖實現一條消息的校驗和。本說明書是:Java中的二進制加法校驗和
校驗和實現爲使得 整個消息包裹件和 消息數據,但不包括校驗和, 是一個簡單的二進制 除了截斷爲四個字節的結果。
恐怕我不知道如何在Java中做到這一點。我會非常感謝任何建議。
M.
我試圖實現一條消息的校驗和。本說明書是:Java中的二進制加法校驗和
校驗和實現爲使得 整個消息包裹件和 消息數據,但不包括校驗和, 是一個簡單的二進制 除了截斷爲四個字節的結果。
恐怕我不知道如何在Java中做到這一點。我會非常感謝任何建議。
M.
他們大概的意思是一個簡單的無符號除了所有字節(假設8位字節是不管你打交道的最小單位):
byte[] data = getTheDataFromSomewhere();
long checksum = 0;
for (int i = 0; i < data.length; i++) {
checksum += (data[i] & 0xFF);
}
checksum = checksum & 0xFFFFFFFFL; // truncate to 4 byte
你可以使用一個int
有作爲,但那會導致負數。按位比較它將是等效的,但這樣比較值更容易。
如果你想要你可以使用java標準庫函數。 http://download.oracle.com/javase/1.5.0/docs/api/java/util/zip/CRC32.html
謝謝jogabonito,我只是讀這個 - 只是爲了檢查,這應該做的二進制補充以上詳細? – Myn 2011-01-27 14:05:20
出於好奇:什麼使用那種校驗和?除非我誤解它,否則這是一個非常糟糕的校驗和。例如,在兩個字節交換時,它不會檢測到任何錯誤。 – 2011-01-27 13:56:00
這是STANAG 4586規範的一部分。 – Myn 2011-01-27 14:03:14