工作笔记(八)
2019-09-26 本文已影响0人
overflow_e4e4
java中byte[]和int互转
众所周知计算机中有二进制组成,byte有8位2进制组成,java中int由4位2进制组成。
今天由于某个需求我需要实现byte[4]和int的互转。
程序如下:
1. 首先是int转换成byte[]
/**
* int转换成byte[]
* @param value
* @return
*/
static byte[] intToByte(int value) {
byte[] bytes = new byte[4];
bytes[0] = (byte) (value >> 24);
bytes[1] = (byte) (value >> 16);
bytes[2] = (byte) (value >> 8);
bytes[3] = (byte) value;
return bytes;
}
int转换byte[]没有什么困难,就是依次往右位移8位就得到对应的byte值。
2. byte[]转换成int
/**
*
* @param bytes
* @return
*/
static int byteToInt(byte[] bytes) {
return handleComplement(bytes[3]) + (handleComplement(bytes[2]) << 8) + (handleComplement (bytes[1]) << 16) + (unhandleComplement(bytes[0]) << 24);
}
/**
* 不处理补码
*
* @return
*/
static int unhandleComplement(byte b) {
return b;
}
/**
* 处理补码
*
* @return
*/
static int handleComplement (byte b) {
return (b & 0xff);
}
这里要注意byte强转int是带符号的,比如有一byte为10000000
,作为一个byte他的值为-128
因为首位1
是补码。但是我需要他作为一个int值的时候为24
个0
后面是10000000
,他的值应该是256,程序中具体处理就是handleComplement(byte b)
。