当前位置: 代码迷 >> J2SE >> 将一个byte数组转换成int?解决方案
  详细解决方案

将一个byte数组转换成int?解决方案

热度:100   发布时间:2016-04-24 00:45:29.0
将一个byte数组转换成int?
如何将一个byte[] b={50,56,48,48};之后将它里面的50,56,48,48按这个顺序组合成一个整数值?高手指点

------解决方案--------------------
参考http://blog.csdn.net/zjsjava/archive/2007/08/15/1745707.aspx
Java code
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;    }
------解决方案--------------------
Java code
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,即大端序。

Java code
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;    }}
  相关解决方案