2016-03-27 12 views
1

Also habe ich ein kleines Problem hier, und ich habe keine Ahnung, was könnte falsch sein. Deshalb frage ich ob das (was ich dir jetzt zeige) korrekt ist. Ich mache Binärdateien zu Byte-Listen, sodass ich diese Bytes in halbe Bytes umwandeln kann. Zum Beispiel: Wenn ich 96 als Dezimalzahl (60 als hexadezimal) bekomme, möchte ich 6 und 0 daraus bekommen. Das Gleiche mit 127 (hex: 7F) - Ich möchte 7 und 15 bekommen. Um dies zu erreichen, schrieb ich den folgenden Code: Sie werden feststellen, dass ich "unsigned bytes" dafür brauche, um zu arbeitenSchalten Sie ein vorzeichenbehaftetes Byte in ein vorzeichenloses Halbbyte.

System.out.println((byte) ((UnsignedByte.unsignedToBytes(b) - (UnsignedByte.unsignedToBytes(b) % 16))/16)); 
System.out.println((byte) (UnsignedByte.unsignedToBytes(b) % 16)); 

public static int unsignedToBytes(byte b) { 
    return b & 0xFF; 
} 

Mache ich etwas falsch oder ist das kein Problem?

+0

Was ist das Problem? – Natecat

+0

Ich bekomme falsche Werte bei falschen Koordinaten und ich möchte nur wissen, ob das Problem hier liegt. – RoiEX

Antwort

1

Verwenden Bitverschiebung und bitweise Operationen:

  • Um die unteren vier Bits zu erhalten, verwenden lowerNibble = wholeByte & 0x0F
  • Um die oberen vier Bits zu erhalten, verwenden upperNibble = (wholeByte >> 4) & 0x0F

dies das Zeichen ignoriert, weil der obere Teil der Zahl wird durch & 0x0F abgeschnitten.

+0

Funktioniert das mit Werten größer als 0x80? – RoiEX

+0

@RoiEX Absolut, tut es. – dasblinkenlight

Verwandte Themen