[Code] 2 bytes in ein int umrechnen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von unix, 6. Juli 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 6. Juli 2010
    2 bytes in ein int umrechnen

    Folgendes: ( Es geht um CRC Summen ^^)

    Hab 2 ints
    254 und 91 (so werden die 2 bytes von der CRC gespeichert!)

    Der Hex Wert von beiden ist
    0xFE und 0x5B

    Also 0xFE5B

    Wenn ich die CRC Summe frisch berechne kommt als int Wert 65115 raus.
    Da 0xFE5B als int nunmal 65115 ist.

    Aber ich kriegs iwie nicht hin die 2 Werte zusammen ebenfalls als einen HEX Code in ein int umzuwandeln.
    Sprich: der addiert mir den int Wert von 0xFE + dem Wert von 0x5B. Das is aber nicht richtig!
    Ich brauch den von 0xFE5B!

    Also sprich, ich will von int1 = 254(0xFE) und int2=91(0x5B) ebenfalls als int 65115 rauskriegen.
    Kriegs aber nur hin, dass der die einzelnen Werte zusammenaddiert xD

    Ich denke das is ne übelst einfache Aufgabe, nur hab ich grad keinen klaren Kopf und schäme mich schon fast, dass ich nich selbst drauf komme

    Danke schonmal
     
  2. 6. Juli 2010
    AW: 2 bytes in ein int umrechnen

    Hey,

    du musst shiften
    0x5B nimmt die ersten 8 bits ein und 0xFE nimmt die zweiten 8-bits ein:
    Code:
    [ 1 1 1 1 1 1 1 0 ] [ 0 1 0 1 1 0 1 1 ]
     0xFE = 254 0x5B=91
    Das heißt, du musst die 0xFE erst 8 bits nach links shiften und kannst dann erst addieren:

    Code:
    int ges = 0x5B+(0xFE<<8)
    edit:
    nochmal ausführlicher:
    Code:
     [ 0 1 0 1 1 0 1 1 ] 
    + [ 1 1 1 1 1 1 1 0 ] [ 0 0 0 0 0 0 0 0 ] < die 8 nullen kommen vom linksshift um 8 stellen.
    ===========================================
     [ 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1 1 ]
    
     
  3. 6. Juli 2010
    AW: 2 bytes in ein int umrechnen

    perfekt, genau das habe ich gebraucht

    Vielen Dank

    EDIT//

    Ich hab leider doch noch einen Fehler, der tritt zwar selten auf, aber trotzdem!

    Folgendes:
    Wenn beide bytes das gleiche sind, dann kackt der ab ^^

    bsp:

    Die errechnete CRC-Summe ist 0x9D9D

    als int werden gespeichert, 157 und 157 (is ja 0x9d)

    0x9D9D = 40349
    Aber durch dieses shiften addiert der mir 413 zusammen xD

    Wie gesagt, passiert nur, wenn beide Werte gleich sind!

    Nochn paar Beispiele ^^

    Aber ich seh grad in den Ausgaben, dass er 0xF2F2 nicht als Fehler rausgespuckt hat xD
    komisch xD
     
  4. 6. Juli 2010
    AW: 2 bytes in ein int umrechnen

    Code:
     int a = 0xF7;
     int b = 0xF7;
     int ges = a+(b<<8);
     System.out.println(a);
     System.out.println(b);
     System.out.println(ges);
     System.out.println(a+b);
    
    kommt raus
    liegt dann wohl an deiner umsetzung
     
  5. 7. Juli 2010
    AW: 2 bytes in ein int umrechnen

    oh shit, hab die variablen vertauscht xD

    Also bei der Addition von oben kommt immer das richtige raus, aber bei der Neuberechnung des CRC-Wertes kommt was anderes raus.!

    Und ich glaube nicht, dass der normale CRC Fehler, der beim Übertragen zu Stande kommt, immer 1 gleiche Hex Werte hat.

    Hier mal kurz meine Umsetzung, die Formel zur Berechnung des CRC Wertes is ausm Internet, aber die funzt!!

    Code:
    int crc4 = data[16] + (data[17] << 8);//Ist immer richtig!
     // Bytes für den CRC Check
     byte[] bytes = { (byte) data[0], (byte) data[1], (byte) data[2],
     (byte) data[3], (byte) data[4], (byte) data[5], (byte) data[6],
     (byte) data[7], (byte) data[8], (byte) data[9],
     (byte) data[10], (byte) data[11], (byte) data[12],
     (byte) data[13], (byte) data[14], (byte) data[15] };
     // CRC Check!!!
     int crc2 = 0xFFFF;
     for (byte b : bytes) {//Berechnung bei gleichen Hex Werten falsch!
     crc2 = ((crc2 >> 8) & 0xff) ^ crc16table[(crc2 ^ b++) & 0xff];
     }
    if (crc4 != crc2) {
    System.out.println("0x"+crc1.toUpperCase()+ "\tRechung: "+crc2+"\tAddition: "+crc4);
    }
    
    crc1 is grad der String aus data[17] und data[16]!

    Also die Berechnung beim speichern sieht auch so aus!
    Der berechnet den CRC von dem bestimmten Array und speichert ihn dann auch da ab, aber ohne sich selbst mit zu zählen!

    Ich habs jetzt nochmal in einer Endlosschleife laufen lassen damit ein paar Fehler aufkommen:

    Hab jetzt herausgefunden, bei den doppelten Werten beachtet er das erste byte gar nicht (oder macht ne 1 draus) dann kommt er auf die falsche Zahl bei der Rechnung!
    Aber das auch nicht immer, es gibt Fälle wo der Doppelte Werte richtig berechnet hat!

    Habs gelöst, hatte noch scheiß Codestückchen drin, die alles kaputt gemacht haben ^^

    Danke
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.