Thread Checksum CRC8 Berechnung
(5 answers)
Opened by Lauvia at 2015-05-27 12:20
Hallo Gwen,
Vielen Dank für dein Stück Code. Ich habe es getestet und es ist OK. Kann es leider nicht anwenden, da es bedarf eine Installation des Package Digest-CRC auf alle Maschinen (tausende PCs) :-( Ich habe eine LookUp Table modifiziert, kann damit aber nichts anfangen! Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 use strict; use warnings; my ($poly, $crc8_initval, $crc8, $i, $j, $fbit, $bitcnt, $data); my @crc8_table; $poly = 0x2F; # => x^8 + x^5 + x^3 + x^2 + X + 1 $crc8_initval = 0xFF; @crc8_table = (); for ($i=0; $i<256; $i++) { $data = $i; $crc8 = $crc8_initval; for($bitcnt = 8; $bitcnt>0; $bitcnt--) { $fbit = ($crc8 ^ $data) & 0x01; if ($fbit == 1) { $crc8 = $crc8 ^ $poly; } $crc8 = ($crc8>>1) & 0x7F; if ($fbit == 1) { $crc8 = $crc8 | 0x80; } $data = $data>>1; } #printf("crc8[$i] = $crc8\n"); $crc8_table[$i] = $crc8; } #print table as c code: printf("\n\n"); printf("unsigned char crc8_lookuptable[256] = {"); for($i=0; $i<256; $i+=16) { printf("\n"); for($j=0; $j<16; $j++) { printf(" 0x%02X,",$crc8_table[$i+$j]); } } printf("\n};\n\n"); Anhänge Last edited: 2015-05-29 16:46:53 +0200 (CEST) |