2017-11-18 24 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를 생성하므로 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