有时候和C的程序通信的时候,我们在封装协议时,可能需要将Java里的int值,转换成byte[]后用socket发送。所以我们需要将32位的int值放到4字节的byte[]里。


1. /**
2.  * int值转成4字节的byte数组
3.  * @param num
4.  * @return
5.  */
6. public static byte[] int2byteArray(int
7. byte[] result = new byte[4];  
8. 0] = (byte)(num >>> 24);//取最高8位放到0下标
9. 1] = (byte)(num >>> 16);//取次高8为放到1下标
10. 2] = (byte)(num >>> 8); //取次低8位放到2下标 
11. 3] = (byte)(num );      //取最低8位放到3下标
12. return
13. }


 反过来,将4字节的byte[]转成int值:


1. /**
2.  * 将4字节的byte数组转成int值
3.  * @param b
4.  * @return
5.  */
6. public static int byteArray2int(byte[] b){  
7. byte[] a = new byte[4];  
8. int i = a.length - 1,j = b.length - 1;  
9. for (; i >= 0 ; i--,j--) {//从b的尾部(即int值的低位)开始copy数据
10. if(j >= 0)  
11.             a[i] = b[j];  
12. else
13. 0;//如果b.length不足4,则将高位补0
14.     }  
15. int v0 = (a[0] & 0xff) << 24;//&0xff将byte值无差异转成int,避免Java自动类型提升后,会保留高位的符号位
16. int v1 = (a[1] & 0xff) << 16;  
17. int v2 = (a[2] & 0xff) << 8;  
18. int v3 = (a[3] & 0xff) ;  
19. return
20. }