Hilfe bei C nach JAVA Portierung

Persönliche Seite #1292899
Lesenswert?

Hallo,
ich würde gerne folgenden CRC-16-Algorithmus nach JAVA portieren:
1
unsigned int calcCRC16r(unsigned int crc, unsigned int c)
2
{
3
  int i;
4

5
  crc ^= c;
6
  for( i = 8; i; i-- ){
7
    crc = (crc >> 1) ^ ((crc & 1) ? 0xA5D1 : 0 );
8
  }
9

10
  return crc;
11
}

Bis jetzt bin ich soweit gekommen, jedoch habe ich ein Problem mit der 
Bedingung in der for-Schleife und dem (crc & 1) als Bedingung:
1
    public int calcCRC16r(int crc, int c)
2
    {
3
        int i;
4

5
        crc ^= c;
6
        for( i = 8; i; i-- ){
7
            crc = (crc >> 1) ^ ((crc & 1) ? 0xA5D1 : 0 );
8
        }
9

10
        return crc;
11
    }

Wie schreib ich das in JAVA um? Wäre nett, wenn ihr mir helfen könntet.

MfG
Julian
Persönliche Seite #1292912
Lesenswert?

Julian W. schrieb:
> Wie schreib ich das in JAVA um? Wäre nett, wenn ihr mir helfen könntet.
>
> MfG
> Julian

1
     public int calcCRC16r(int crc, int c)
2
     {
3
         int i;
4
 
5
         crc ^= c;
6
         for( i = 8; i != 0; i-- ){
7
             crc = (crc >> 1) ^ ((crc & 1 = 1) ? 0xA5D1 : 0 );
8
         }
9
 
10
         return crc;
11
     }
Müßte so passen.

ggf solltest du aber auf long umsteigen da int standardmäßig ein signed 
typ ist, sollte hier aber keine Relevanz haben. ggf noch den Shift nach 
rechts '>>' durch einen logischen '>>>' Shift ersetzen.
Persönliche Seite #1292921
Lesenswert?

Siehe mein Hinweis am Ende, außerdem aktzeptiert java keine integer als 
boolean in der for Schleife und auch nicht im Tenärem Operator...
Wobei es mir hier auch so schent als würde nur eine 8bit CRC berechnet.

Anbei nochmal etwas übersichtlicher und 32bit unsigned kompatibel.
1
long calcCRC16r(long crc, long c) {
2
  crc = (crc & 0xFFFFFFFF) ^ (c & 0xFFFFFFFF);
3
  for(int i = 0; i < 8; i++) {
4
    crc = crc >> 1;
5
    if (crc & 1 == 1) {
6
       crc ^= 0xA5D1;
7
    }
8
  }
9
  return crc & 0xFFFFFFFF;
10
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren