2012-05-25 2 views
3

자바에서는 부호없는 8 비트 정수 (0에서 255 범위 내)가되도록 파일에 정수를 쓰려면 어떻게해야합니까? 숫자가 int 유형이고 0-255 이내이면 충분합니까? 아니면 먼저 다른 유형으로 변환해야합니까? 나는 그것도 똑같은 것 같아? 하지만 파일에 넣을 때 재미있는 일이 생기면 확실하지 않습니다.java : 부호없는 8 비트 정수로 파일에 정수 쓰기

답변

8

부호가 붙은 부호와 부호가없는 것은 비트 패턴 자체가 아니라 어떻게 비트 패턴이 해석되는지에 관한 문제입니다.

정수가 0에서 255 범위에있는 경우 바이트로 잼을하여 파일에 쓸 수 있습니다. 자바 서명 된 것으로 바이트 비트 패턴을 해석하기 때문에

그러나, 당신이 그들을 다시 읽을 때주의해야합니다. 예를 들어

, 당신은 정수 253을 말한다. 이것은 (전체 32 비트 형태로)입니다 :

00000000000000000000000011111101 

당신이 할 경우 : 당신이 사용하는 자바를 요구하는 경우에

11111101 

:

int i = 253; 
byte b = (byte) i; 

b는 비트를 포함합니다 Java는 비트를 부호로 해석 할 때 -3이 패턴 11111101으로 표시되기 때문에 -3이라고 주장합니다. 따라서 파일에 해당 바이트를 쓰면 원하는 경우 비트 11111101이 기록됩니다.

마찬가지로 파일을 읽을 때 다시 바이트를 읽을 때 읽은 바이트는 비트 패턴 11111101으로 채워지며 다시 자바는 -3으로 해석됩니다. 그래서 그냥하지 수 :

byte b = readByteFromFile(); 
int i = b; 

자바는 -3b 's의 내용을 해석하고 당신에게있을 것입니다 32 비트 정수로 -3를 나타내는 정수 줄 것 때문에 :

11111111111111111111111111111101 

대신, 끝내야 할 정수가 다음과 같아야합니다.

00000000000000000000000011111101 

그래서,

byte b = readByteFromFile(); 
int i = (0x000000FF) & b; 
+0

다음과 같은 의미입니까? short s = (0x00FF) & b;? – Brian

관련 문제