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个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 而是上面的先移位,然后按位或然后谁帮我解读一下上面的式子
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
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);
}
}
比如说int 800 ,就是16进制的320
对应4个byte分别是0,0,3,32
把这4个byte转成16进制就是0,0,3,20
然后排起来就OK了