请问高手,在字节数组中怎样用6个字节表示一个数啊?

解决方案 »

  1.   

    public void analysis(byte[] data) {
        
        int a = (int) data[0] + (int) (data[1] << 8);
    }如a是由两个字节构成的,所以可以用上面的写法。
      

  2.   

    那 6 个字节,也采用上面的方法移不行吗?需要采用 long 型数据,int 只有 4 个字节。
      

  3.   

    6个字节写成这样行吗?
    int a = (int)data[0] + (int)data[1]<<8+(int)data[2]<<16+(int)data[3]<<32+
    (int)data[4]<<64+(int)data[5]<<128 
      

  4.   

    怎么移那么多,每隔一次增加 8 位long a = (long)data[0] + (long)data[1] << 8 + (long)data[2] << 16 + (long)data[3] << 24 ...
      

  5.   

    那如果没有强调有高低位怎么办啊,拿两个字节来说有高低位的如下
    int a = (int)data[0] + (int)data[1]<<8;
    没有高低位怎么写啊? 
      

  6.   

    [0] 放高八位,还是 [5] 放高八位,这个很重要,需要事先约定好的,否将将会直接影响到结果的。public class PI {

    public static void main(String[] args) {

    byte[] bytes = "123456".getBytes(); for (byte b : bytes) {
    System.out.printf("%08d ", Integer.parseInt(Integer.toBinaryString(b)));
    }
    System.out.println();
    for(int i=0; i<bytes.length; i++) {
    System.out.printf("%8s ", "bytes[" + i + "]");
    } System.out.println();
    System.out.println();

    long a = 0L;
    // [0] 存放高八位,[5] 存放低八位 
    for (int i = bytes.length - 1; i >= 0; i--) {
    a |= ((long) bytes[i]) << ((bytes.length - 1 - i) * 8);
    }
    System.out.println(a);

    System.out.println();

    a = 0L;
    // [0] 存放高八位,[5] 存放低八位 
    for (int i = 0; i < bytes.length; i++) {
    a |= ((long) bytes[i]) << (i * 8);
    }
    System.out.println(a);
    }
    }
      

  7.   

    上面代码的注释写错了,上面的作废掉,看下面的:public class Test {

    public static void main(String[] args) {

    byte[] bytes = "123456".getBytes(); for (byte b : bytes) {
    System.out.printf("%08d ", Integer.parseInt(Integer.toBinaryString(b)));
    }
    System.out.println();
    for(int i=0; i<bytes.length; i++) {
    System.out.printf("%8s ", "bytes[" + i + "]");
    } System.out.println();
    System.out.println();

    long a = 0L;
    // [0] 存放高八位,[5] 存放低八位 
    for (int i = 0; i < bytes.length; i++) {
    a |= ((long) bytes[i]) << ((bytes.length - 1 - i) * 8);
    }
    System.out.println(a);

    System.out.println();

    a = 0L;
    // [0] 存放低八位,[5] 存放高八位 
    for (int i = 0; i < bytes.length; i++) {
    a |= ((long) bytes[i]) << (i * 8);
    }
    System.out.println(a);
    }
    }