2013-06-06 3 views
5

Ich habe eine Bitmaske in einem Byte gespeichert werden, da ich nur 8 Bits brauche. Wenn ich es bin die Schaffung ich es als String zu tun (ich dachte, es würde auf diese Weise einfacher sein) und ich es dann mit Byte.parseByte(mask,2) auf ein Byte verwandeln, aber ich fand es nicht für bestimmte Werte nicht funktioniert:Warum Byte.parseByte ("10000001", 2) einen NFE wirft?

String bits="10000001"; 
Byte.parseByte(bits,2);// throws a NFE 

Aber wenn ich tun:

byte b=(byte)0x81; //1000 0001 

Es ist kein Problem.

PS: Ich fand eine Abhilfe, byte b=(byte)Integer.parseInt(bits, 2); aber trotzdem möchte ich wissen, warum ich nicht mehr als 8 Bits in eine

+1

Kurze Antwort: weil 'Byte' signiert ist. –

+0

Ja, ich weiß es, die erste 1 sagt, dass es eine negative Zahl ist. Mein Punkt ist, dass das kein Problem sein sollte. Wie kann ich dann -127 speichern, wenn ich einen String erhalte? –

Antwort

7

10000001 binär ist 129 dezimal Byte umwandeln kann. Ergo, es ist größer als Byte.MAX_VALUE.

Ihre Lösung

byte b=(byte)0x81; //1000 0001 

wird in b führen -127 den Wert. Das Gleiche gilt für Ihre Problemumgehung.

+0

So ist es nur Byte.parseByte Funktion ist nicht in der Lage, ein gegebenes Byte zu speichern, es muss es in eine Zahl zuvor zu transformieren. Ich dachte, es würde so etwas wie 1s hinzufügen und dann verschieben. 0x81 ist auch 129 aber es funktioniert –

Verwandte Themen