bitwise xor in c++ => "^"
Beispiel: Berechnung der Length Checksum.
Als example packet nehmen wir das was funj0ker gepostet hat :
SessionID Packet: [5e] [08 00 00 00] [00 00 00 00] [d1 c5 d7 19]
[5e] [65 72 0e 48] [04 00 00 00] [fa 25 17 18] [14 00 00 00]
Und so berechnet man den data length checksum:
data länge:
integer byte array bit array
4 -> {04,00,00,00} -> {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
das bit array muss man nun mit dem datastream in der wikipedia crc32 funktion ersetzen:
int datastream[] = {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; /* int: 4, LSB zuerst */
unsigned int crc32_rev = 0xffffffff; /* Schieberegister, Startwert (111...) */
for (int i = 0; i < 32; ++i)
if ((crc32_rev & 1) != datastream[i])
crc32_rev = (crc32_rev >> 1) ^ 0xEDB88320;
else
crc32_rev >>= 1;
printf("0x%08X\n", crc32_rev ^ 0x19d7c5d1); /* inverses Ergebnis, MSB zuerst */
Das ergebeniss musst du jetzt nur noch reversen ( 0x480e7265 -> 0x65720e48 )