java实现int整型转换成byte[]字节数组
1.首先我们要了解计算机存储都是以“补码”形式存储的,这里简单说一下原码,反码,补码
原码:将一个整数,转换成二进制,就是其原码。
反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。
补码:正数的补码就是其原码;负数的反码+1就是补码。
然后在java中int类型占4个byte(字节),1个byte(字节)占8个bit(位),也就是说int类型占了32个bit,在Java中byte是有符号的范围是-128~127
2.整数int = 1000 为例
二进制:
源码:00000000 00000000 00000011 11101000
反码:00000000 00000000 00000011 11101000
补码:00000000 00000000 00000011 11101000
补码不右移动
00000000 00000000 00000011 11101000 最低位的字节转换成十进制为-24
补码右移动8位
00000000 00000000 00000000 00000011 最低位的字节转换成十进制为3
补码右移动16位
00000000 00000000 00000000 00000000 最低位的字节转换成十进制为0
补码右移动32位
00000000 00000000 00000000 00000000 最低位的字节转换成十进制为0
3.转换成byte[]字节数组两种转换为:
3.1从高位(左端开始)取byte[] = [0,0,3,-24]
3.2从低位(右端开始)取byte[] = [-24,3,0,0]
package test;
import java.util.Arrays;
public class ByteUtil {
/**
* 方法功能:int整型转换成字节数组byte[],注意该算法是从高位(左端)往低位(右端)取二进制,
* len为字节个数,int整型占4个字节为32位。
* @param int n
* @param int len
* @return byte[]
* */
public static byte[] int2BytesA(int n, int len) throws IllegalArgumentException
{
if (len <= 0) {
throw new IllegalArgumentException("Illegal of length");
}
byte[] b = new byte[len];
for (int i = len; i > 0; i--) {
b[(i - 1)] = ((byte)(n >> 8 * (len - i) & 0xFF));
}
return b;
}
/**
* 方法功能:int整型转换成字节数组byte[],注意该算法是从低位(右端)往高位(左端)取二进制。
*
* */
public static void int2BytesB(){
int i = 1000;
byte[] arr = new byte[4] ;
// arr[0] = (byte)i ; //通过debug可以看到arr[0] = -24,也就是11101000
// arr[1] = (byte)(i >> 8) ; //通过debug可以看到arr[1] = 3,也就是00000011
// arr[2] = (byte)(i >> 16) ; //通过debug可以看到arr[2] = 0, 也就是00000000
// arr[3] = (byte)(i >> 24) ; //通过debug可以看到arr[3] = 0, 也就是00000000
for (int j = 0; j < 4; j++) {
arr[j] = ((byte)(i >> 8 * (j) & 0xFF));
}
System.out.println("从低位(右端)取字节数组为:"+Arrays.toString(arr));//输出结果:从低位(右端)取字节数组为:[-24, 3, 0, 0]
}
public static void main(String[] args) {
int n = 1000;
int len = 4;//整型为4个字节。
byte[] b = new byte[len];
b = int2BytesA(n, len);
System.out.println("从高位(左端)取字节数组为:"+Arrays.toString(b));//输出结果:从高位(左端)取字节数组为:[0, 0, 3, -24]
int2BytesB();
}
}