程序中的所有数在计算机内存中都是以二进制的形式储存的。所以有时候我们还是有必要学习一下位运算的。我们知道在java中一个整型是占用四个字节32位的,而一
个byte类型占用一个字节8位的。所以我们可以用一个整型来最多表示一个长度为4的byte数组,同样我们可以用一个长度为4的byte数组来表示一个整型。下面我们就
看一下怎么用代码怎么去写整型和byte数组的相互转换。
字节数组表示一个整型
/**接下来我们测试一下看看:
* 用一个长度为4的数组表示一个整数
* 因为java中一个int类型占4个字节即八位,而一个byte类型占1个字节
* 所以如果用byte表示一个整数的话,需要一个长度为4的byte数组。
* 注意这里要用无符号右移
* @param bytes
* @param temp
*/
public void putInt(byte[] bytes, int temp) {
bytes[0] = (byte)(temp >>> 24) ;//bytes[0]表示一个int值的最高8位
bytes[1] = (byte)(temp >>> 16);//bytes[1]表示一个int值的接下来的8位
bytes[2] = (byte)(temp >>> 8);//bytes[2]表示一个int值的再接下来的8位
bytes[3] = (byte)(temp); //bytes[3]表示一个int值的最低8位
}
/**
* 把一个长度为4的byte数组还原为整数
* 注意这里一定要明确的区分开来一个int值的四个字节。
* 每个字节之间一定要用括号()括起来
* @param bytes
* @return
*/
public int getInt(byte[] bytes) {
return (bytes[0] << 24) | //还原int值最高8位
((bytes[1] & 0xff) << 16) | //还原int值接下来的8位
((bytes[2] & 0xff) << 8 ) |//还原int值再接下来的8位
(bytes[3] & 0xff); //还原int值的最低8位
}
@Test
public void byteTransformationInt(){
int temp = 579;
byte[] bytes = new byte[4];
putInt(bytes,temp);//用一个长度为4的数组表示一个整型
System.out.println(getInt(bytes));//从长度为4的数组中还原放入的整型
}
测试的输出结果和我们放入的整型值一模一样。
用整型表示一个长度为4的byte数组
/**接下来我们来测试一下:
* 这里可以根据自己的需要改变byte数组的长度,
* 这里我用的是一个长度为4的字节数组
* @return
*/
public int putBytes(byte[] bytes){
return (bytes[0] & 0xff) |
((bytes[1] & 0xff) << 8) |
((bytes[2] & 0xff) << 16) |
((bytes[3] & 0xff) << 24);
}
/**
* 从整型转换字节数组
* @param a
* @return
*/
public byte[] getBytes(int a){
byte[] bytes = new byte[4];
bytes[0] = (byte)(a);
bytes[1] = (byte)(a >>> 8);
bytes[2] = (byte)(a >>> 16);
bytes[3] = (byte)(a >>> 24);
return bytes;
}
@Test我们看看测试结果:
public void testIntToBytes(){
byte[] bytes = new byte[]{14,78,12,-12};
int tmp = putBytes(bytes);
byte[] bytes1 = getBytes(tmp);
System.out.println(Arrays.toString(bytes1));
}
输出结果和我们要转换的字节数组一样。