一直搞不清楚整形变量与字节数组的转换,看过各位网友的解释,现写下此随笔:
- 整形变量转换成字节数组
对于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变量。