У меня есть функция Java CRC16, как показано ниже, и мне нужно, чтобы она возвращала буквенно-цифровой результат длиной 4. Но иногда он возвращает только буквенно-цифровое число длиной 3. Почему? Я сравниваю этот CRC с приложением C, которое вычисляет CRC, и обычно это один и тот же CRC, но время от времени JAVA возвращает 3-символьный результат, который вызывает исключение. Почему?
int crrc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
String str = "0009";
byte []by = x; // x is the byte array from args
for (byte b : by) {
for (int i = 0; i < 8; i++) {
boolean bit = ((b >> (7-i) & 1) == 1);
boolean c15 = ((crrc >> 15 & 1) == 1);
crrc <<= 1;
if (c15 ^ bit) crrc ^= polynomial;
}
}
crrc &= 0xffff;
System.out.println(crrc);
System.out.println("CRC16-CCITT = " + Integer.toHexString(crrc) + " " + Integer.toHexString(crrc).length());