문제

나는 변환하려고한다 int 세로 bytes 그것을 대표합니다 int (빅 엔디언).

나는 그것이 비트 와이즈와 비트 변화와 관련이 있다고 확신합니다. 그러나 나는 그것을하는 방법을 모른다.

예를 들어:

int myInt;

// some code

byte b1, b2 , b3; // b1 is most significant, then b2 then b3.

*int가 4 바이트이고 3 바이트는 지나치게/언더 플로우를 할 가능성이 있음을 알고 있습니다.

도움이 되었습니까?

해결책

가장 중요한 바이트를 얻으려면 :

b3 = myInt & 0xFF;

두 번째로 가장 중요한 바이트 :

b2 = (myInt >> 8) & 0xFF;

그리고 3 번째 최소한의 바이트 :

b1 = (myInt >> 16) & 0xFF;

설명:

비트 와이드 및 0xff (이진에서 111111111)의 값은 그 숫자에서 가장 유의미한 8 비트 (비트 0 ~ 7)를 반환합니다. 숫자를 오른쪽으로 8 번 이동하면 비트 8 ~ 15를 비트 위치 0 ~ 7로, 0xff와 함께 두 번째 바이트를 반환합니다. 마찬가지로, 숫자를 오른쪽으로 16 배로 이동하면 16 ~ 23 비트를 비트 위치 0 ~ 7로, 0xff와 함께 3 번째 바이트를 반환합니다.

다른 팁

byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;

나는 자바 의이 홀프가 어떻게 지루하지만, 나는 자바 데브가 아니다

int는 3 바이트에 맞지 않습니다. 그러나이 특정 것들을 알고 있다고 가정하면 다음과 같습니다.

   byte b1 = (myInt & 0xff);
   myInt >>= 8;
   byte b2 = (myInt & 0xff);
   myInt >>= 8;
   byte b3 = (myInt & 0xff);

자바에서

int myInt = 1;
byte b1,b2,b3;
b3 = (byte)(myInt & 0xFF);
b2 = (byte)((myInt >> 8) & 0xFF);
b1 = (byte)((myInt >> 16) & 0xFF);
System.out.println(b1+" "+b2+" "+b3);

출력 0 0 1

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top