Aşağıdaki koduNasıl iyi CRC16 java dizesinden alınır? masanın altına kadar sonucu doğrulamak için
static int crc16(final byte[] buffer) {
int crc = 0xFFFF;
for (int j = 0; j < buffer.length ; j++) {
crc = ((crc >>> 8) | (crc << 8))& 0xffff;
crc ^= (buffer[j] & 0xff);//byte to int, trunc sign
crc ^= ((crc & 0xff) >> 4);
crc ^= (crc << 12) & 0xffff;
crc ^= ((crc & 0xFF) << 5) & 0xffff;
}
crc &= 0xffff;
return crc;
}
kullanan Android uygulamasında dizesinden CRC16 almaya çalışıyorum ve bazı veriler var
ben A
geçirerek Bu işlev, kötü CRC ve hepsi için aynı olan B915
alıyorum. Tabloda belirtildiği gibi neden iyi CRC alamıyorum. lütfen beni nerede yanlış yapıyorum? Teşekkürler!
Çok teşekkürler Burada
kod parçacığı olduğunu! Onun çözüldü. –
Hoş Geldiniz! :) – user2004685
Hayır. Bu sadece bir bandaid. CCIT CRC-16, başlangıç değeri 0xffff olarak tanımlanmıştır. Ortak kullanımdaki tek diğer başlangıç değeri sıfırdır. Kodunuzdaki hatayı bulun ve düzeltin. Tablodaki bir algoritma da dahil olmak üzere, sekiz kat daha hızlı, – EJP