Sto cercando di interfacciarmi con alcuni sistemi e nelle loro specifiche richiedono di calcolare CRC 16 per la comunicazione seriale. Ecco un estratto dalla documentazioneCome calcolare CRC 16 con polinomiale x16 + x12 + x5 + 1
"16 bit CCITT CRC del messaggio utilizzando il polinomio standard X16 + X12 + X5 +1. I valori di semi sono sempre 0 (zero)"
Prima di tutto ho trovato solo 2-3 esempi di codice C# su come farlo e nessuno sembra darmi il valore corretto. Ho provato questo uno http://www.sanity-free.com/133/crc_16_ccitt_in_csharp.html, ma non sono sicuro di cosa impostare per il valore iniziale. Ho provato gli zeri e ancora non funziona.
dati sto testando con è:
0x00 0x09 0x10 0x01 0x01 0x7C 0xF4 0xB8 0x00,
il valore CRC che ottenga è
0xF2 0x24,
tuttavia il loro sistema dice che dovrebbe essere
0xC0 0x2F
mia comprensione è che polinomiale x16 + x12 + x5 + 1 = 0x11021, tuttavia anche quando lo uso nel codice mi dà ancora una risposta errata. Che cosa sto facendo di sbagliato?
+1 Per 'Self-Learner' –
no, è lo stesso polinomio. È molto comune per le implementazioni CRC utilizzare il polinomio bit-invertito. 0x1021 invertito è 0x8408. La descrizione di CRC16-CCITT Kermit CRC è su http://reveng.sourceforge.net/crc-catalogue/16.htm#crc.cat.kermit, che prende atto della riflessione. –
@MarkAdler Grazie – fenix2222