Бинарное сложение контрольной суммы в Java - PullRequest
3 голосов
/ 27 января 2011

Я пытаюсь реализовать контрольную сумму для сообщения. Спецификация такова:

Контрольная сумма реализована так, что вся оболочка сообщения и данные сообщения, исключая контрольную сумму, является результатом простого двоичного файла сложение усечено до четырех байтов.

Боюсь, я понятия не имею, как это сделать на Java. Буду очень признателен за любой совет.

М.

Ответы [ 2 ]

4 голосов
/ 27 января 2011

Они, вероятно, означают простое добавление без знака всех байтов (при условии, что 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, но это приведет к отрицательному числу. По битам это будет эквивалентно, но так проще сравнивать значения.

0 голосов
/ 27 января 2011

Если вы хотите, вы можете использовать функцию стандартной библиотеки Java. http://download.oracle.com/javase/1.5.0/docs/api/java/util/zip/CRC32.html

...