如何将一个byte[] b={50,56,48,48};之后将它里面的50,56,48,48按这个顺序组合成一个整数值?高手指点

解决方案 »

  1.   

    参考http://blog.csdn.net/zjsjava/archive/2007/08/15/1745707.aspxpublic 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;
        }
      

  2.   

    不知道字符串拼接可不可以,先转化成String类型
      

  3.   


    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);
      

  4.   

    LZ的意思应该是int是四字节 现在它的第一个字节是50 第二个字节是56 第三和第四个字节是48 问这个int值是多少
      

  5.   

    因为不知道你的这个 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;
        }
    }
      

  6.   

    LS和JAVA源码差不多,不错不错
      

  7.   

    此算法在转换成Little Endian时当且仅当start的数值是4的倍数时才是正确的
    修改如下:
    for (int i = start, k = start + len % (Integer.SIZE / Byte.SIZE + 1); i < k; i++) {
    //((i - start) % 4))亦可只写为(i - start)
    tmp |= (data[i] & 0xff) << ((isBigEndian ? (k - i - 1)
    : ((i - start) % 4)) * Byte.SIZE);
    }