Forum: PC-Programmierung CRC16 von C auf Java


von Gast U. (tellob)


Lesenswert?

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.

von g457 (Gast)


Lesenswert?

> Mein C Code sieht so aus: [..]
> crc ^= ((unsigned char) crc) >> 4;
           ^^^^^^^^^^^^^
> Der Java-Port dazu: [..]
> crc ^= crc >> 4;

HTH

von user (Gast)


Lesenswert?

crc ^= ((unsigned char) crc) >> 4;

ändere das in folgendes

crc ^= (crc & 0xff) >> 4;

von g457 (Gast)


Lesenswert?

nochwas:

> crc ^= crc << 12;
> crc ^= (crc & 0xFF) << 5;

Die beiden musst Du jeweils auf 16 Bit zurechtstutzen.

von Gast U. (tellob)


Lesenswert?

Was meinst du mit Zurechtstutzen? &0xFF ?

von g457 (Gast)


Lesenswert?

> Was meinst du mit Zurechtstutzen? &0xFF ?

Ja, zum Beispiel. Aber mit 16 Bits. Danach

> crc = (crc >> 8) | (crc << 8);

ist es auch nötig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.