日期:2014-05-20 浏览次数:20758 次
public static int byteToInt2(byte[] b) { int mask=0xff; int temp=0; int n=0; for(int i=0;i<4;i++){ n<<=8; temp=b[i]&mask; n|=temp; } return n; }
------解决方案--------------------
int sum = 0; byte[] b={50,56,48,48}; for(int i = 0 ; i <4 ; i++){ int temp =((int)b[i])&0xff; temp <<= i*8; sum = temp + sum; } System.out.println(sum);
------解决方案--------------------
因为不知道你的这个 byte 数组的字节序如何,所以没办法写出符合你要求的转换方法,
比如说:50,56,48,48,那 50 是 int 的高位字节,还是低位字节呢?
如果是 50 作为 int 数据的高字节,那么可以采用下面的含有 BE 的方法。
下面这段代码中的转换可以适合 BE 和 LE 序,并且可以挑选字节数组中的几个字节进行转换。
Java 序列化时的字节序采用 Big-Endian,即大端序。
public class ByteUtil { /** * 将 Little-Endian 的字节数组转为 int 类型的数据<br /> * Little-Endian 表示高位字节在高位索引中 * @param bys 字节数组 * @param start 需要转换的开始索引位数 * @param len 需要转换的字节数量 * @return 指定开始位置和长度以 LE 方式表示的 int 数值 */ public static int bytes2IntLE(byte[] bys, int start, int len) { return bytes2Int(bys, start, len, false); } public static int bytes2IntLE(byte[] bys) { return bytes2Int(bys, 0, bys.length, false); } /** * 将 Big-Endian 的字节数组转为 int 类型的数据<br /> * Big-Endian 表示高位字节在低位索引中 * @param bys 字节数组 * @param start 需要转换的开始索引位数 * @param len 需要转换的字节数量 * @return 指定开始位置和长度以 BE 方式表示的 int 数值 */ public static int bytes2IntBE(byte[] bys, int start, int len) { return bytes2Int(bys, start, len, true); } public static int bytes2IntBE(byte[] bys) { return bytes2Int(bys, 0, bys.length, true); } /** * 将字节数组转为 Java 中的 int 数值 * @param bys 字节数组 * @param start 需要转换的起始索引点 * @param len 需要转换的字节长度 * @param isBigEndian 是否是 BE(true -- BE 序,false -- LE 序) * @return */ private static int bytes2Int(byte[] bys, int start, int len, boolean isBigEndian) { int n = 0; for(int i = start, k = start + len % (Integer.SIZE / Byte.SIZE + 1); i < k; i++) { n |= (bys[i] & 0xff) << ((isBigEndian ? (k - i - 1) : i) * Byte.SIZE); } return n; } }