2011-01-27 31 views
2

我試圖實現一條消息的校驗和。本說明書是:Java中的二進制加法校驗和

校驗和實現爲使得 整個消息包裹件和 消息數據,但不包括校驗和, 是一個簡單的二進制 除了截斷爲四個字節的結果。

恐怕我不知道如何在Java中做到這一點。我會非常感謝任何建議。

M.

+0

出於好奇:什麼使用那種校驗和?除非我誤解它,否則這是一個非常糟糕的校驗和。例如,在兩個字節交換時,它不會檢測到任何錯誤。 – 2011-01-27 13:56:00

+0

這是STANAG 4586規範的一部分。 – Myn 2011-01-27 14:03:14

回答

3

他們大概的意思是一個簡單的無符號除了所有字節(假設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有作爲,但那會導致負數。按位比較它將是等效的,但這樣比較值更容易。