Hilfe bei C nach JAVA Portierung

OP Persönliche Seite #1292899
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
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.
Gast
schaut doch schonmal ganz gut aus bis auf die Tatsache das Java kein 
unsigned kennt und es da beim Shiften von negativen Werten zu Problemen 
kommen kann
Persönliche Seite
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.