2017-06-03 1 views
0

Ich möchte eine Binärdatei lesen und einige Manipulationen an jedem Byte vornehmen. Ich möchte testen, dass ich die Bytes richtig manipuliere. Ich möchte eine Bytevariable1 auf "00000000" setzen und dann eine weitere Bytevariable2 auf "00001111" setzen und ODER newvariable = variable1 | variable2, die neue Variable < < 4 Bit verschieben und dann den int-Wert ausgeben.JAVA Byte Manipulation

byte a = 00000000; 
//Convert first oneByte to 4 bits and then xor with a; 
byte b = 00001111; 
byte c = (byte)(a|b); 
c = c << 4; 
System.out.println("byte= " + c + "\n"); 

Ich bin nicht sicher, warum ich „incompatiable Typen: mögliche verlustbehaftete Umwandlung von Byte in int“ erhalte

+0

Sie können dies auch lesen https://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html –

Antwort

3

Sie benötigen einen ‚0b‘ vor diesen Zahlen setzen Binärkonstanten auszudrücken. Die Zahl 00001111 wird als Literal in Oktal interpretiert, das ist 585 in Dezimal. Das maximale Byte ist 127 (da es signiert ist). Versuchen Sie 0b00001111 stattdessen.

Als Literale werden diese immer noch int sein. Je nachdem, wo Sie die Zuweisung vornehmen, müssen Sie möglicherweise auch explizit auf byte verweisen.

+0

Hinzufügen von '0b' vor Byte a und Byte b behebt es dort . Dann Setzbyte c = (Byte) (c << 4); selbst wenn es durch c = c (Byte) umgewandelt wird, arbeitet << 4-Drucken wie erwartet! – shayster01

+0

'00001111' ist 1111 in Oktal und 585 in Dezimal – saka1029

+0

@ saka1029 Guter Fang. Aktualisierung meiner Antwort – Brick