2017-06-03 62 views
0

我想读取一个二进制文件并对每个字节进行一些操作。我想测试我正在操纵字节。我想将字节变量1设置为“00000000”,然后将另一个字节变量2设置为“00001111”,或者将它们设置为newvariable = variable1 | variable2,将新的变量< <移位4位,然后打印出int值。JAVA字节操作

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"); 

我不知道为什么我不断收到“incompatiable类型:可能有损转换从byte到int”

+0

您也可以阅读https://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html –

回答

3

你需要把一个“0B”在这些数字面前表达二进制常量。数字00001111被解释为八进制文字,即十进制585。最大字节是127(因为它已被签名)。改为尝试0b00001111

作为文字,这些仍然是int,所以根据您在何处进行作业,您可能还需要明确地将其转换为byte

+0

在字节a和字节b的前面添加'0b'可以修复它。然后设置字节c =(byte)(c << 4);即使通过c = c(byte)<< 4按预期工作打印-16! – shayster01

+0

'00001111'是八进制的1111和十进制的585 – saka1029

+0

@ saka1029良好的捕获。更新我的答案。 – Brick