다음 편집기에서는 Java 바이트 배열 유형(byte[])과 int 유형을 변환하는 방법에 대한 기사를 제공합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리고자 합니다. 에디터를 따라가서 살펴보겠습니다.
코드는 다음과 같습니다.
public class CommonUtils { //高位在前,低位在后 public static byte[] int2bytes(int num){ byte[] result = new byte[4]; result[0] = (byte)((num >>> 24) & 0xff);//说明一 result[1] = (byte)((num >>> 16)& 0xff ); result[2] = (byte)((num >>> 8) & 0xff ); result[3] = (byte)((num >>> 0) & 0xff ); return result; } //高位在前,低位在后 public static int bytes2int(byte[] bytes){ int result = 0; if(bytes.length == 4){ int a = (bytes[0] & 0xff) << 24;//说明二 int b = (bytes[1] & 0xff) << 16; int c = (bytes[2] & 0xff) << 8; int d = (bytes[3] & 0xff); result = a | b | c | d; } return result; } public static void main(String[] args){ int a = -64; System.out.println("-64="+Integer.toBinaryString(-64)); byte[] bytes = CommonUtils.int2bytes(a); for(int i = 0 ; i<4 ; i++){ System.out.println(bytes[i]); } a = CommonUtils.bytes2int(bytes); System.out.println(a); } }
실행 결과는 다음과 같습니다.
-64=11111111111111111111111111000000 -1 -1 -1 -64 -64
참고 1:
-64는 [10000000][00000000][00000000][01000000]
원본 코드를 보수로 변환하여 이진 원본 코드로 변환합니다. 코드는 [11111111][11111111] [11111111][11000000]이며 이는 콘솔 출력과 동일합니다. java에서는 바이너리가 2의 보수
형식으로 표시되는 것을 볼 수 있습니다.-64 >>> 24 이후(부호 없는 오른쪽 시프트, 상위 비트는 0으로 채워짐)는 [00000000][00000000][00000000][11111111]
이전 단계 결과 & 0xff, 여전히 [00000000][00000000][00000000][ 11111111]입니다. 0xff의 값은 [00000000][00000000][00000000][11111111]이므로 & 0xff의 목적은 가장 낮은 8비트를 변경하지 않고 유지하는 것입니다. , 나머지 위치는 0
그런 다음 결과를 바이트 형식으로 변환하고 하위 비트를 유지하고 상위 비트를 잘라내어 [11111111]이0xff임을 알 수 있습니다. 이전 단계의 상위 비트는 실제로 불필요합니다.
그래서 결과[0]는 [11111111]=-1입니다. so on:result[1]为[11111111]=-1 result[2]为[11111111]=-1 result[3]为[11000000]=-64
설명 2:
byte[0]은 [11111111]입니다. 먼저 byte[0]은 다음과 같이 변환됩니다. int 유형 (비트 시프트 연산 전에 바이트 유형은 int 유형으로 변환됩니다. 양수이면 상위 비트가 0으로 채워지고, 음수이면 상위 비트가 1로 채워집니다. ) 상위 비트는 1로 채워져 [11111111][11111111][11111111][11111111]
이전 단계의 결과& 0xff 이후에는 [ 00000000][00000000][00000000][11111111]
이전 단계의 결과는 << 24(왼쪽 시프트, 하위 패딩 0)이며 [ 11111111][00000000][00000000][00000000] = a같은 방법으로 b, c, d를 얻습니다. 즉,[11111111][00000000][00000000][00000000] | [00000000][11111111][00000000][00000000] | 由于<<16位之前& 0xff,故保证b的最高8位都为0 [00000000][00000000][11111111][00000000] | 由于<<8位之前& 0xff,故保证c的最高16位都为0 [00000000][00000000][00000000][11000000] 由于& 0xff,故保证d的最高24为都为0 =[11111111][11111111][11111111][11000000] = -64바이트가 int로 변환될 때 패딩이 a | b | c | d(0으로 설정),
& 0xff에 영향을 주지 않는다는 것을 알 수 있습니다. 필요합니다
short long과 byte[] 간의 변환도 비슷합니다PS:
1 , int 타입은 4바이트를 차지하고, 바이트 타입은 1바이트만 차지합니다2, 원본 코드: 최상위 비트는 부호 비트, 나머지 비트는 숫자 크기를 나타냅니다2 원본 코드: 00000010-2의 원본 코드: 100000103, 역코드:양수의 역코드는 원본 코드와 동일합니다. 음수의 역부호 부호 비트는 그대로 두고 나머지 비트는 비트 단위로 반전
2의 1의 보수 : 00000010
-2의 보수: 11111101
4, 보수: 양수의 보수는 원래 코드와 동일합니다. 음수의 보수는 음수의 보수입니다. 12의 보수: 00000010-2의 보수: 11111110 위는 Java 바이트 배열 유형(byte[]) 및 int의 코드 예제에 대한 자세한 소개입니다. 입력 상호 변환 방법 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!