java中整形变量与字节数组的转换

时间:2023-01-12 17:32:04

  一直搞不清楚整形变量与字节数组的转换,看过各位网友的解释,现写下此随笔:

  • 整形变量转换成字节数组  

    对于int类型变量a,将其转换为字节数组b,方法如下:      

        int a = 100;
        byte[] b = byte[4];
        
        b[3] = (byte)(a & 0xff);
        b[2] = (byte)(a>>8 & 0xff);
        b[1] = (byte)(a>>16 & 0xff);
        b[0] = (byte)(a>>24 & 0xff);
        
  • 字节数组转换成整形变量

    将刚才得到的字节数组b转换成整形变量a,

int a = 0;
for(int i =0; i< b.length; i++){
      a += (b[i]&0xff) << (24-8*i);
}
return a;

  java里对于byte变量,假如操作中有int操作数,默认会将byte隐式转换为int变量,而转换成的int变量高24位全部为1,在将byte数组转换为int变量的时候,假如直接用移位操作就会有麻烦,因为高位都是ffffff,所以需将隐式转换生成的ffffff消掉。因此,将每个字节和0xff相与,然后再移位,最后把各步产生的结果相加即可得到原始的int变量。