| Autor |
Beitrag |
Gammatester
      
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: Mo 13.07.09 15:50
Hier Beispielcode mit Testwerten und -Ausgabe. Man beachte das die CRC-Werte als word ausgegeben werden, in den Originaldaten sind sie als Einzelbytes (Low/High) gegeben:
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:
| program t_x25;
{$ifdef win32} {$apptype console} {$endif}
uses mem_util,crcmodel,crcm_cat;
const tvs: array[1..18] of string = ( '4B1317000000000000000000', '4B1317000200000001000000', '4B1317000200000002000000', '4B1317000200000003000000', '4B1317000200000004000000', '4B1317000200000005000000', '4B1317000200000006000000', '4B1317000200000007000000', '4B1317000200000008000000', '4B1317000200000009000000', '4B131700020000000A000000', '4B131700020000000B000000', '4B131700020000000C000000', '4B131700020000000D000000', '4B131700020000000E000000', '4B131700020000000F000000', '4B1317000200000010000000', '4B1317000200000011000000');
var ctx: TCRC_ctx; crc: longint; buf: array[0..100] of byte; i,L: word; begin cm_Create(CRC16_X25,nil,ctx); for i:=1 to 18 do begin Hex2Mem(tvs[i], @buf, sizeof(buf), L); cm_Full(ctx, CRC, @buf, L); writeln(ctx.name,'(',HexStr(@buf, L),')=$',HexWord(CRC)); end; end. |
Ausgabe:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| CRC-16/X-25(4b1317000000000000000000)=$23ed CRC-16/X-25(4b1317000200000001000000)=$3439 CRC-16/X-25(4b1317000200000002000000)=$11f4 CRC-16/X-25(4b1317000200000003000000)=$0d4f CRC-16/X-25(4b1317000200000004000000)=$5a6e CRC-16/X-25(4b1317000200000005000000)=$46d5 CRC-16/X-25(4b1317000200000006000000)=$6318 CRC-16/X-25(4b1317000200000007000000)=$7fa3 CRC-16/X-25(4b1317000200000008000000)=$cd5a CRC-16/X-25(4b1317000200000009000000)=$d1e1 CRC-16/X-25(4b131700020000000a000000)=$f42c CRC-16/X-25(4b131700020000000b000000)=$e897 CRC-16/X-25(4b131700020000000c000000)=$bfb6 CRC-16/X-25(4b131700020000000d000000)=$a30d CRC-16/X-25(4b131700020000000e000000)=$86c0 CRC-16/X-25(4b131700020000000f000000)=$9a7b CRC-16/X-25(4b1317000200000010000000)=$eb23 CRC-16/X-25(4b1317000200000011000000)=$f798 |
Gammatester
|
|
Tastaro
      
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Mo 13.07.09 15:50
Gammatester hat folgendes geschrieben : | Und was soll die Unit uCrc hier? Die crc16-Funktionen sind doch 'CRC-16/ZMODEM'. Beispielsweise liefert Deine Unit den Wert $66DC für den ersten Datensatz (statt $23ED)!
Gammatester |
Hast recht. Hab nicht richtig geguckt. Sorry.
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: Mo 13.07.09 23:38
ach super, danke!
ich werde das gleich morgen testen, bin leider bis jetzt noch nicht dazu gekommen...
danke danke danke! 
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 19.07.09 20:22
Gammatester hat folgendes geschrieben : | Hier Beispielcode mit Testwerten und -Ausgabe. Man beachte das die CRC-Werte als word ausgegeben werden, in den Originaldaten sind sie als Einzelbytes (Low/High) gegeben:
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:
| program t_x25;
{$ifdef win32} {$apptype console} {$endif}
uses mem_util,crcmodel,crcm_cat;
const tvs: array[1..18] of string = ( '4B1317000000000000000000', '4B1317000200000001000000', '4B1317000200000002000000', '4B1317000200000003000000', '4B1317000200000004000000', '4B1317000200000005000000', '4B1317000200000006000000', '4B1317000200000007000000', '4B1317000200000008000000', '4B1317000200000009000000', '4B131700020000000A000000', '4B131700020000000B000000', '4B131700020000000C000000', '4B131700020000000D000000', '4B131700020000000E000000', '4B131700020000000F000000', '4B1317000200000010000000', '4B1317000200000011000000');
var ctx: TCRC_ctx; crc: longint; buf: array[0..100] of byte; i,L: word; begin cm_Create(CRC16_X25,nil,ctx); for i:=1 to 18 do begin Hex2Mem(tvs[i], @buf, sizeof(buf), L); cm_Full(ctx, CRC, @buf, L); writeln(ctx.name,'(',HexStr(@buf, L),')=$',HexWord(CRC)); end; end. |
Ausgabe:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| CRC-16/X-25(4b1317000000000000000000)=$23ed CRC-16/X-25(4b1317000200000001000000)=$3439 CRC-16/X-25(4b1317000200000002000000)=$11f4 CRC-16/X-25(4b1317000200000003000000)=$0d4f CRC-16/X-25(4b1317000200000004000000)=$5a6e CRC-16/X-25(4b1317000200000005000000)=$46d5 CRC-16/X-25(4b1317000200000006000000)=$6318 CRC-16/X-25(4b1317000200000007000000)=$7fa3 CRC-16/X-25(4b1317000200000008000000)=$cd5a CRC-16/X-25(4b1317000200000009000000)=$d1e1 CRC-16/X-25(4b131700020000000a000000)=$f42c CRC-16/X-25(4b131700020000000b000000)=$e897 CRC-16/X-25(4b131700020000000c000000)=$bfb6 CRC-16/X-25(4b131700020000000d000000)=$a30d CRC-16/X-25(4b131700020000000e000000)=$86c0 CRC-16/X-25(4b131700020000000f000000)=$9a7b CRC-16/X-25(4b1317000200000010000000)=$eb23 CRC-16/X-25(4b1317000200000011000000)=$f798 |
Gammatester |
ich bekomm da immer eine fehlermeldung (messagebox) "I/O error 105" was mache ich falsch?
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 19.07.09 21:20
okay, super es funktioniert!!!
23ed
3439
11f4
0d4f
5a6e
46d5
6318
7fa3
cd5a
d1e1
f42c
e897
bfb6
a30d
86c0
9a7b
eb23
f798
DANKE!
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: So 19.07.09 22:19
sorry doppelposts...
mir ist noch aufgefallen das die crc endsumme vertauscht werden muss...
so sieht nun mein fertiges ergebnis aus:
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: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256:
| 4B1317000000000000000000ED237E 4B131700020000000100000039347E 4B1317000200000002000000f4117E 4B13170002000000030000004f0d7E 4B13170002000000040000006e5a7E 4B1317000200000005000000d5467E 4B131700020000000600000018637E 4B1317000200000007000000a37f7E 4B13170002000000080000005acd7E 4B1317000200000009000000e1d17E 4B131700020000000A0000002cf47E 4B131700020000000B00000097e87E 4B131700020000000C000000b6bf7E 4B131700020000000D0000000da37E 4B131700020000000E000000c0867E 4B131700020000000F0000007b9a7E 4B131700020000001000000023eb7E 4B131700020000001100000098f77E 4B131700020000001200000055d27E 4B1317000200000013000000eece7E 4B1317000200000014000000cf997E 4B131700020000001500000074857E 4B1317000200000016000000b9a07E 4B131700020000001700000002bc7E 4B1317000200000018000000fb0e7E 4B131700020000001900000040127E 4B131700020000001A0000008d377E 4B131700020000001B000000362b7E 4B131700020000001C000000177c7E 4B131700020000001D000000ac607E 4B131700020000001E00000061457E 4B131700020000001F000000da597E 4B1317000200000020000000d1a77E 4B13170002000000210000006abb7E 4B1317000200000022000000a79e7E 4B13170002000000230000001c827E 4B13170002000000240000003dd57E 4B131700020000002500000086c97E 4B13170002000000260000004bec7E 4B1317000200000027000000f0f07E 4B131700020000002800000009427E 4B1317000200000029000000b25e7E 4B131700020000002A0000007f7b7E 4B131700020000002B000000c4677E 4B131700020000002C000000e5307E 4B131700020000002D0000005e2c7E 4B131700020000002E00000093097E 4B131700020000002F00000028157E 4B131700020000003000000070647E 4B1317000200000031000000cb787E 4B1317000200000032000000065d7E 4B1317000200000033000000bd417E 4B13170002000000340000009c167E 4B1317000200000035000000270a7E 4B1317000200000036000000ea2f7E 4B131700020000003700000051337E 4B1317000200000038000000a8817E 4B1317000200000039000000139d7E 4B131700020000003A000000deb87E 4B131700020000003B00000065a47E 4B131700020000003C00000044f37E 4B131700020000003D000000ffef7E 4B131700020000003E00000032ca7E 4B131700020000003F00000089d67E 4B1317000200000040000000353e7E 4B13170002000000410000008e227E 4B131700020000004200000043077E 4B1317000200000043000000f81b7E 4B1317000200000044000000d94c7E 4B131700020000004500000062507E 4B1317000200000046000000af757E 4B131700020000004700000014697E 4B1317000200000048000000eddb7E 4B131700020000004900000056c77E 4B131700020000004A0000009be27E 4B131700020000004B00000020fe7E 4B131700020000004C00000001a97E 4B131700020000004D000000bab57E 4B131700020000004E00000077907E 4B131700020000004F000000cc8c7E 4B131700020000005000000094fd7E 4B13170002000000510000002fe17E 4B1317000200000052000000e2c47E 4B131700020000005300000059d87E 4B1317000200000054000000788f7E 4B1317000200000055000000c3937E 4B13170002000000560000000eb67E 4B1317000200000057000000b5aa7E 4B13170002000000580000004c187E 4B1317000200000059000000f7047E 4B131700020000005A0000003a217E 4B131700020000005B000000813d7E 4B131700020000005C000000a06a7E 4B131700020000005D0000001b767E 4B131700020000005E000000d6537E 4B131700020000005F0000006d4f7E 4B131700020000006000000066b17E 4B1317000200000061000000ddad7E 4B131700020000006200000010887E 4B1317000200000063000000ab947E 4B13170002000000640000008ac37E 4B131700020000006500000031df7E 4B1317000200000066000000fcfa7E 4B131700020000006700000047e67E 4B1317000200000068000000be547E 4B131700020000006900000005487E 4B131700020000006A000000c86d7E 4B131700020000006B00000073717E 4B131700020000006C00000052267E 4B131700020000006D000000e93a7E 4B131700020000006E000000241f7E 4B131700020000006F0000009f037E 4B1317000200000070000000c7727E 4B13170002000000710000007c6e7E 4B1317000200000072000000b14b7E 4B13170002000000730000000a577E 4B13170002000000740000002b007E 4B1317000200000075000000901c7E 4B13170002000000760000005d397E 4B1317000200000077000000e6257E 4B13170002000000780000001f977E 4B1317000200000079000000a48b7E 4B131700020000007A00000069ae7E 4B131700020000007B000000d2b27E 4B131700020000007C000000f3e57E 4B131700020000007D00000048f97E 4B131700020000007E00000085dc7E 4B131700020000007F0000003ec07E 4B1317000200000080000000ec057E 4B131700020000008100000057197E 4B13170002000000820000009a3c7E 4B131700020000008300000021207E 4B131700020000008400000000777E 4B1317000200000085000000bb6b7E 4B1317000200000086000000764e7E 4B1317000200000087000000cd527E 4B131700020000008800000034e07E 4B13170002000000890000008ffc7E 4B131700020000008A00000042d97E 4B131700020000008B000000f9c57E 4B131700020000008C000000d8927E 4B131700020000008D000000638e7E 4B131700020000008E000000aeab7E 4B131700020000008F00000015b77E 4B13170002000000900000004dc67E 4B1317000200000091000000f6da7E 4B13170002000000920000003bff7E 4B131700020000009300000080e37E 4B1317000200000094000000a1b47E 4B13170002000000950000001aa87E 4B1317000200000096000000d78d7E 4B13170002000000970000006c917E 4B131700020000009800000095237E 4B13170002000000990000002e3f7E 4B131700020000009A000000e31a7E 4B131700020000009B00000058067E 4B131700020000009C00000079517E 4B131700020000009D000000c24d7E 4B131700020000009E0000000f687E 4B131700020000009F000000b4747E 4B13170002000000A0000000bf8a7E 4B13170002000000A100000004967E 4B13170002000000A2000000c9b37E 4B13170002000000A300000072af7E 4B13170002000000A400000053f87E 4B13170002000000A5000000e8e47E 4B13170002000000A600000025c17E 4B13170002000000A70000009edd7E 4B13170002000000A8000000676f7E 4B13170002000000A9000000dc737E 4B13170002000000AA00000011567E 4B13170002000000AB000000aa4a7E 4B13170002000000AC0000008b1d7E 4B13170002000000AD00000030017E 4B13170002000000AE000000fd247E 4B13170002000000AF00000046387E 4B13170002000000B00000001e497E 4B13170002000000B1000000a5557E 4B13170002000000B200000068707E 4B13170002000000B3000000d36c7E 4B13170002000000B4000000f23b7E 4B13170002000000B500000049277E 4B13170002000000B600000084027E 4B13170002000000B70000003f1e7E 4B13170002000000B8000000c6ac7E 4B13170002000000B90000007db07E 4B13170002000000BA000000b0957E 4B13170002000000BB0000000b897E 4B13170002000000BC0000002ade7E 4B13170002000000BD00000091c27E 4B13170002000000BE0000005ce77E 4B13170002000000BF000000e7fb7E 4B13170002000000C00000005b137E 4B13170002000000C1000000e00f7E 4B13170002000000C20000002d2a7E 4B13170002000000C300000096367E 4B13170002000000C4000000b7617E 4B13170002000000C50000000c7d7E 4B13170002000000C6000000c1587E 4B13170002000000C70000007a447E 4B13170002000000C800000083f67E 4B13170002000000C900000038ea7E 4B13170002000000CA000000f5cf7E 4B13170002000000CB0000004ed37E 4B13170002000000CC0000006f847E 4B13170002000000CD000000d4987E 4B13170002000000CE00000019bd7E 4B13170002000000CF000000a2a17E 4B13170002000000D0000000fad07E 4B13170002000000D100000041cc7E 4B13170002000000D20000008ce97E 4B13170002000000D300000037f57E 4B13170002000000D400000016a27E 4B13170002000000D5000000adbe7E 4B13170002000000D6000000609b7E 4B13170002000000D7000000db877E 4B13170002000000D800000022357E 4B13170002000000D900000099297E 4B13170002000000DA000000540c7E 4B13170002000000DB000000ef107E 4B13170002000000DC000000ce477E 4B13170002000000DD000000755b7E 4B13170002000000DE000000b87e7E 4B13170002000000DF00000003627E 4B13170002000000E0000000089c7E 4B13170002000000E1000000b3807E 4B13170002000000E20000007ea57E 4B13170002000000E3000000c5b97E 4B13170002000000E4000000e4ee7E 4B13170002000000E50000005ff27E 4B13170002000000E600000092d77E 4B13170002000000E700000029cb7E 4B13170002000000E8000000d0797E 4B13170002000000E90000006b657E 4B13170002000000EA000000a6407E 4B13170002000000EB0000001d5c7E 4B13170002000000EC0000003c0b7E 4B13170002000000ED00000087177E 4B13170002000000EE0000004a327E 4B13170002000000EF000000f12e7E 4B13170002000000F0000000a95f7E 4B13170002000000F100000012437E 4B13170002000000F2000000df667E 4B13170002000000F3000000647a7E 4B13170002000000F4000000452d7E 4B13170002000000F5000000fe317E 4B13170002000000F600000033147E 4B13170002000000F700000088087E 4B13170002000000F800000071ba7E 4B13170002000000F9000000caa67E 4B13170002000000FA00000007837E 4B13170002000000FB000000bc9f7E 4B13170002000000FC0000009dc87E 4B13170002000000FD00000026d47E 4B13170002000000FE000000ebf17E 4B13170002000000FF00000050ed7E |
|
|
Gammatester
      
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: So 19.07.09 22:47
Das liegt daran, daß in den Daten die 16-Bit-Werte als einzelne Bytes dargestellt werden. Bei Ausgabe als Word sieht es so aus, als wenn die Bytes verdreht sind. Bei Delphi/Windows gilt Little-Endian, Du kannst deshalb die Bytes von CRC einzeln mit (CRC and $FF) und (CRC shr 8 and $FF) oder lo(CRC) und hi(CRC).
Gammatester
|
|
oOXTCOo 
      
Beiträge: 141
Windows XP Prof. 3
Delphi 7
|
Verfasst: Mo 20.07.09 10:58
Gammatester hat folgendes geschrieben : | Das liegt daran, daß in den Daten die 16-Bit-Werte als einzelne Bytes dargestellt werden. Bei Ausgabe als Word sieht es so aus, als wenn die Bytes verdreht sind. Bei Delphi/Windows gilt Little-Endian, Du kannst deshalb die Bytes von CRC einzeln mit (CRC and $FF) und (CRC shr 8 and $FF) oder lo(CRC) und hi(CRC).
Gammatester |
achso, dann ists klar.
ich habs jetzt einfach so gelöst das ich es als word ausgeben lasse und dann einfach vertausche und wieder als word ausgebe.
danke.
|
|
|