Hey liebe Leute!
Mein erster Beitrag hier bei euch. Tolles Forum, tolle Seite!
Ich bin dabei ein CRC 16 Algorithmus auf Java zu portieren, um dort
Pakete auswerden zu können. Leider will das nur nicht so wie ich und ich
finde den Fehler einfach nicht.
Mein C Code sieht so aus:
1 | uint16_t
|
2 | crc16 (const uint8_t * buffer, uint32_t size)
|
3 | {
|
4 | uint16_t crc = 0xFFFF;
|
5 |
|
6 | if (buffer && size)
|
7 | while (size--)
|
8 | {
|
9 | crc = (crc >> 8) | (crc << 8);
|
10 | crc ^= *buffer++;
|
11 | crc ^= ((unsigned char) crc) >> 4;
|
12 | crc ^= crc << 12;
|
13 | crc ^= (crc & 0xFF) << 5;
|
14 | }
|
15 |
|
16 | return crc;
|
17 | }
|
Der Java-Port dazu:
1 | private static short crc16(final byte[] data) {
|
2 |
|
3 | int crc = 0xFFFF;
|
4 |
|
5 | for (int i = 0; i < data.length; i++) {
|
6 | crc = (crc >> 8) | (crc << 8);
|
7 | crc ^= data[i];
|
8 | crc ^= crc >> 4;
|
9 | crc ^= crc << 12;
|
10 | crc ^= (crc & 0xFF) << 5;
|
11 | }
|
12 |
|
13 | return (short) (crc & 0xffff);
|
14 |
|
15 | }
|
Kann mir einer von euch sagen, wo hier mein Fehler liegt? Finde Ihn
einfach nicht.