2016-10-02 2 views
0

Ich habe ein Problem mit Konvertierungen verschiedener Typen. In meinem Code versuche ich, Bytes zu verwenden und sie dann in eine ganze Zahl zu konvertieren, um in der Lage zu sein, x Menge von Bits von der Ganzzahl in einen Speicher einer Art zu schreiben.Wie kann ich ein Byte als Integer in Java uminterpretieren?

Das Problem ist, dass, wenn ich eine negative Zahl als Byte habe und ich es in eine Ganzzahl umwandeln, die Bitdarstellung als Integer alle führenden Bits als 1 gesetzt. Also wenn ich versuche, zum Beispiel 10 Bits zu speichern aus der Ganzzahl, bekomme ich die führenden Bits als 1 statt 0, wie ich erwartet hatte.

Gibt es eine Möglichkeit, das Byte als Integer neu zu interpretieren, während die Bitdarstellung gleich bleibt? Ich muss mich nicht um den tatsächlichen numerischen Wert der ganzen Zahl kümmern.

Von C++ Ich bin es gewohnt, vorzeichenlose Werte zu haben, die dieses Problem verhindern würden, aber jetzt bin ich im Verlust, wie man damit umgeht, da Java auf vorzeichenbehaftete ganze Zahlen beschränkt ist.

Beispiel:

/* 
    decimal: -28 
    as byte: 11100100 
    as integer: 11111111111111111111111111100100 
    needed/expected integer: 00000000000000000000000011100100 
*/ 
import java.util.*; 
import java.lang.*; 
import java.io.*; 

class MyClass 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     System.out.println(Integer.toBinaryString((byte)-28)); 
    } 
} 

https://ideone.com/VE960u

+0

Was meinen Sie wollen Sie die Bit-Darstellung die gleiche beibehalten, aber Sie kümmern sich nicht um den numerischen Wert? Sie sind das Gleiche. – Zarwan

+0

"Gibt es eine Möglichkeit, das Byte als Integer neu zu interpretieren, während die Bitdarstellung gleich bleibt" - Sie könnten intuitiv an die Operation denken, die Sie ausführen möchten, indem Sie "die Bitdarstellung gleich halten", aber das ist es wirklich nicht. Das int hat eine Menge von Bits, die das Byte gerade nicht hat, und das Füllen dieser Bits mit Nullen bedeutet nicht, dass "die Bitdarstellung gleich bleibt", wie die Zeichenerweiterung. – user2357112

+0

@Zarwan Die Idee besteht darin, nur die in der Ganzzahl gesetzten Bits im Byte zu belassen. Wenn dies getan ist, ist der numerische Wert/Interpretation der Ganzzahl anders als das, was das Byte war. – Rochet2

Antwort

2
yourInt = yourByte & 255; 

einfach die unerwünschten Bits maskieren.

Verwandte Themen