Мне нужна проверка CRC для приложения, которое я пишу, но я не могу понять, что за код и калькуляторы онлайн, что я делаю неправильно. Я могу просто не понять это правильно. Это то, что мне нужно:
Используется CRC-CCITT с начальным значением 0xFFFF с обратным порядком входных битов. Например, сообщение Get Device Type имеет вид: 0x01, 0x06, 0x01, 0x00, 0x0B, 0xD9. CRC составляет 0xD90B.
И вот код, который я использую:
public static int CRC16CCITT(byte[] bytes) {
int crc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
for (byte b : bytes) {
for (int i = 0; i < 8; i++) {
boolean bit = ((b >> (7-i) & 1) == 1);
boolean c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit) crc ^= polynomial;
}
}
crc &= 0xffff;
//System.out.println("CRC16-CCITT = " + Integer.toHexString(crc));
return crc;
Я пишу это для устройства Android, поэтому должно быть в Java.