Расчет CRC в Java

Я читаю файл с последовательного порта, используя протокол x-modem и 133-байтовый пакет. Я читаю в этом

      1 byte is SOH
      2 byte packet number
      3 byte nagative of packet number
next  128 bytes data
      2 bytes CRC sent from other side.

Мне нужно вычислить CRC 128-байтовых данных и 2-байтовых CRC, отправленных с другой стороны, которые я должен сделать однобайтовыми и сопоставить с моей рассчитанной CRC. Как я могу это сделать в Java?


person Community    schedule 09.04.2009    source источник
comment
Хорошо, какой курс устанавливает задания по чтению последовательных портов в Java? stackoverflow.com/questions/348777/   -  person The Archetypal Paul    schedule 15.06.2011


Ответы (3)


Попробуйте использовать Jacksum.

person sangupta    schedule 09.04.2009

Sun JDK 1.6 содержит sun.misc.CRC16, но есть вероятность, что это не тот CRC16, который вы ищете, поскольку используется несколько разных полиномов.

person krosenvold    schedule 09.04.2009
comment
Класс Sun использует init = 0, polynomial = 0x1021. Он также использует наивную побитовую реализацию, а не реализацию на основе таблиц. - person user207421; 11.03.2011

Вот мой код на C, который легко перенести на Java - вы можете использовать его как угодно. Ссылки на слово относятся к 16-битному беззнаковому значению - вы должны иметь возможность использовать вместо этого char в Java.

Прошло слишком много времени с тех пор, как я работал с 16-битными CRC, поэтому я не помню, есть ли варианты, основанные на заполнении. Я почти уверен, что использовал этот код в реализации X-Modem на языке C когда-то.

Источник размещен на tech.dolhub.com.

person Lawrence Dol    schedule 09.04.2009