>Java >java지도 시간 >Java 바이트 배열 유형(byte[]) 및 int 유형 상호 변환 방법의 코드 예제에 대한 자세한 소개

Java 바이트 배열 유형(byte[]) 및 int 유형 상호 변환 방법의 코드 예제에 대한 자세한 소개

黄舟
黄舟원래의
2017-03-08 10:21:531749검색

다음 편집기에서는 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의 원본 코드: 10000010

3, 역코드:

양수의 역코드는 원본 코드와 동일합니다. 음수의 역부호 부호 비트는 그대로 두고 나머지 비트는 비트 단위로 반전

2의 1의 보수 : 00000010

-2의 보수: 11111101

4, 보수: 양수의 보수는 원래 코드와 동일합니다. 음수의 보수는 음수의 보수입니다. 1

2의 보수: 00000010

-2의 보수: 11111110

위는 Java 바이트 배열 유형(byte[]) 및 int의 코드 예제에 대한 자세한 소개입니다. 입력 상호 변환 방법 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.