Java中int与byte数组的互相转换

实现代码

package dream.kuber.test;

public class BytesUtil {
	public static int bytes2Int(byte[] bytes) {
		int result = 0;
		//将每个byte依次搬运到int相应的位置
		result = bytes[0] & 0xff;
		result = result << 8 | bytes[1] & 0xff;
		result = result << 8 | bytes[2] & 0xff;
		result = result << 8 | bytes[3] & 0xff;
		return result;
	}
	
	public static byte[] int2Bytes(int num) {
		byte[] bytes = new byte[4];
		//通过移位运算,截取低8位的方式,将int保存到byte数组
		bytes[0] = (byte)(num >>> 24);
		bytes[1] = (byte)(num >>> 16);
		bytes[2] = (byte)(num >>> 8);
		bytes[3] = (byte)num;
		return bytes;
	}
}

理解 & 0xff

看代码和注释:

package dream.kuber.test;

public class App {
	public static void main(String[] args) {
		// 截取低8位,00000000 00000000 00000000 10000000 -> 10000000,补码中10000000为-128
		byte b = (byte)128;
		//输出 -128
		System.out.println(b);
		// 10000000 -> 11111111 11111111 11111111 10000000,则 i为 -128
		int i = b;
		System.out.println(b); //原本的128,从byte转回来,变成了-128
		//要解决问题,我们要保留byte的8个位,但符号位则保持为0,此时可以利用 & 0xff 实现
		/**
		 *                            10000000
		 * 00000000 00000000 00000000 11111111     &运算
		 * 
		 * 00000000 00000000 00000000 10000000   <-结果
		 */
		int j = b & 0xff; //字面量默认是int类型,和byte进行 & 运算,因此保证结果为正
		System.out.println(j); //输出128
	}
	
}

你可能感兴趣的:(Java基础)