1个byte8位
1个int32位
4个byte对应1个int
byte[]转int的时候是怎么做的,网上的方法是
int in = (b1 & 0xff) | ((b2 << 8) & 0xff00) | ((b3 << 24) >>> 8) | (b4 << 24);我想知道4个byte到底是怎么样对应1个int,为什么不是b1+b2+b3+b4 而是上面的先移位,然后按位或然后谁帮我解读一下上面的式子

解决方案 »

  1.   

    你是要组合一个int出来 不是吧数加一起
      

  2.   

    我无聊,我来写写如int值:11111111 10000000 10101010 01010101byte1:11111111
    byte2:10000000
    byte3:10101010
    byte4:01010101byte1左移24位后:11111111 00000000 00000000 00000000
    byte2左移16位后: 00000000 10000000 00000000 00000000
    byte3左移08位后: 00000000 00000000 10101010 00000000
    byte4左移00位后:00000000 00000000 00000000 01010101-------------------------------------------------------
    “|”操作的结果:11111111 10000000 10101010 01010101
      

  3.   

    有点感觉了,具体还是不明白
    public class main { public static void main(String[] args) {
    //int to byte[4]
    int in = 800;
    byte b1 = (byte) (in & 0xff);
    byte b2 = (byte) ((in >> 8) & 0xff);
    byte b3 = (byte) ((in >> 16) & 0xff);
    byte b4 = (byte) (in >>> 24); System.out.println(b1);
    System.out.println(b2);
    System.out.println(b3);
    System.out.println(b4);
    //byte[4] to int
    int ret = countSec((byte) 32, (byte) 3, (byte) 0, (byte) 0);
    System.out.println(ret);
    } private static int countSec(byte b1, byte b2, byte b3, byte b4) {
    int a, b, c, d;
    a = byteToInt(b4) << 24;
    b = byteToInt(b3) << 16;
    c = byteToInt(b2) << 8;
    d = byteToInt(b1);
    return a + b + c + d;
    } public static int byteToInt(byte b) {
    return Integer.parseInt(Integer.toBinaryString(b & 0xff), 2);
    }
    }
      

  4.   

    尼玛的整出来了
    比如说int 800 ,就是16进制的320
    对应4个byte分别是0,0,3,32
    把这4个byte转成16进制就是0,0,3,20
    然后排起来就OK了