说明
java中int是4个字节,转成byte时,是长度为4的byte数组
int转byte
转换思路
将十进制的 16909320,转成二进制,是:00000001 00000010 00000100 00001000
每8个数是1组(表示1个字节),共4组,即4个字节
第一个字节的计算过程:
取出前8个数:
00000001 00000010 00000100 00001000 >> 24 (右移24位)
= 00000001
= 1(十进制)
第二个字节的计算过程:
第一步,取出前16个数:
00000001 00000010 00000100 00001000 >> 16(右移16位)
= 00000001 00000010
第二步,从第一步的结果中取出后8个数:
00000001 00000010 & 0xff
= 00000001 00000010 & 00000000 11111111
= 00000000 00000010
= 2(十进制)
第三个字节的计算过程:
第一步,取出前24个数字:
00000001 00000010 00000100 00001000 >> 8
= 00000001 00000010 00000100
第二步,从第一步的结果中取出后8个数:
00000001 00000010 00000100 & 0xff
= 00000001 00000010 00000100 & 00000000 00000000 11111111
= 00000000 00000000 00000100
= 4(十进制)
第四个字节的计算过程:
算最后8个数:
00000001 00000010 00000100 00001000 & 0xFF
= 00000001 00000010 00000100 00001000 & 00000000 00000000 00000000 11111111
= 00000000 00000000 00000000 00001000
= 8(十进制)
结果是:[1,2,4,8]
代码
/**
* int到byte[] 由高位到低位
* @param i 需要转换为byte数组的整行值。
* @return byte数组
*/
public static byte[] intToByteArray(int i) {
byte[] result = new byte[4];
result[0] = (byte)((i >> 24) & 0xFF);
result[1] = (byte)((i >> 16) & 0xFF);
result[2] = (byte)((i >> 8) & 0xFF);
result[3] = (byte)(i & 0xFF);
return result;
}
byte数组转int
转换思路
取出第一个字节进行转换:
第一步:
1(十进制)
= 00000001(转二进制)
第二步:
00000001 << 24
= 00000001 00000000 00000000 00000000
= 16777216
取出第二个字节进行转换:
第一步:
2(十进制)
= 00000010(转二进制)
第二步:
00000010 << 16
= 00000010 00000000 00000000
= 131072
取出第三个字节进行转换:
第一步:
4(十进制)
= 00000100(转二进制)
第二步:
00000100 << 8
= 00000100 00000000
= 1024
第四个字节不需要位移运算
将上面的4个数字累加求和
16777216 + 131072 + 1024 + 8 = 16909320
代码
/**
* byte[]转int
* @param bytes 需要转换成int的数组
* @return int值
*/
public static int byteArrayToInt(byte[] bytes) {
int value=0;
for(int i = 0; i < 4; i++) {
int shift= (3-i) * 8;
value +=(bytes[i] & 0xFF) << shift;
}
return value;
}
通用转换
/**
* 将数字 i 转换为 长度是 x 的byte数组
* @param i
* @param x
* @return
*/
public static byte[] intToByteArray(int i,int x) {
byte[] result = new byte[x];
for(int start = x ; start>0 ;start--){
result[x-start] = (byte) ((i >> 8*(start-1)) & 0xFF);
}
return result;
}
/**
* 将 长度是x的byte数组 转换成 int 型
* @param bytes
* @param x
* @return
*/
public static int byteArrayToInt(byte[] bytes,int x) {
int value=0;
for(int i = 0; i < x; i++) {
int shift= (x-1-i) * 8;
value +=(bytes[i] & 0xFF) << shift;
}
return value;
}