Java에서 int를 3 바이트로 바꾸는 방법은 무엇입니까?
-
06-07-2019 - |
문제
나는 변환하려고한다 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
제휴하지 않습니다 StackOverflow