Hallo zusammen,
ich habe eine Frage bzgl. der CRC16 Berechnung einer Bytefolge.
Nehmen wir die Bytefolge[]={0x05,0x06,0x40,0x00,0x00,0x01} an
Wenn ich nun die CRC berechne, komme ich auf einen Wert von 0x4e5c.
Der Wert ist nach folgender Funktion berechnet, allerdings bekomme ich
von dem Empfänger keine Antwort zurück, wo ich glaube, dass es an der
Prüfsumme liegen könnte.
1 | void calc_crc(unsigned int* pCrc, unsigned char uData)
|
2 | {
|
3 | int iBit;
|
4 | for (iBit = 0; iBit < 8; iBit++, uData >>= 1)
|
5 | {
|
6 | if ((uData ^ *pCrc) & 0x01)
|
7 | {
|
8 | *pCrc >>= 1;
|
9 | *pCrc ^= 0xA001;
|
10 | }
|
11 | else*pCrc >>= 1;
|
12 | }
|
13 | }
|
Kann jemand bestätigen, dass die Prüfsumme korrekt berechnet ist?
Wieso bekommt man bei einer CRC16 Prüfung so viele unterschiedlichen
Werte für die Prüfsummen? Online-Kalkulatoren geben mir auch immer
wieder unterschiedliche Werte aus, je nachdem welchen CRC16 man
auswählt.
Danke und viele Grüße
Spice