2017-11-18 15 views
-1

バイト内のいくつかのビットを反転し(ファイルから読み込む)、別のファイルに保存する必要があります。私はバイトレイヤー上で解決策を見つけませんか?Javaによるバイト・ビット操作

byte [] input = byte [8]; 
int count = inputStream.read (input); 

// now I want reverse f.e. on byte 4, the first 3 bits 
// examples (01010101 => 10110101 or 11000001 => 00100001) 


// then later I write 
outputStream.write (input); 

ありがとう

+0

は、シフト演算子に探してみてください。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html – robertf

答えて

0

することはできビットマスクとXOR演算子を使用して "フリップ" ビット。 Java XORはintを生成するので、4バイトintの最初のバイトを取得するには0xFFでバイナリANDを行う必要があります。

例コード:

byte[] input = new byte[] {(byte) 0b11110000, 0b01011111}; 
int mask = 0b11100000; 

System.out.println(Integer.toBinaryString(0xff & input[0])); // 11110000 
System.out.println(Integer.toBinaryString(0xff & input[1])); // 01011111 

for (int i = 0; i < input.length; i++) { 
    input[i] = (byte) (0xff & input[i]^mask); 
} 

System.out.println(Integer.toBinaryString(0xff & input[0])); // 00010000 
System.out.println(Integer.toBinaryString(0xff & input[1])); // 10111111