在数据类型相互转换
在转换中需要了解大端小端模式:
大端模式:数据的高位存储在内存的低字节。
小端模式:数据的地位存储在内存的低字节。
例如:数据 0x12345678 大小端模式中byte数据存储 如下:
模式 | 数据值 |
---|---|
大端模式 | {0x12,0x34,0x56,0x78} |
小端模式 | {0x78,0x56,0x34,0x12} |
- jdk封装 int|byte 相互转换
public void intToBytes(int value){
// int 需要 4 byte, 默认是大端(ByteOrder.BIG_ENDIAN)
return ByteBuffer.allocate(4).putInt(value).array();
}
public void bytesToInt(){
byte[] byteArray = new byte[] {00, 00, 00, 01};
return ByteBuffer.wrap(bytes).getInt();
}
- 自己封装 int|byte 类型转换
// 大端的解析方式
public int byteToIntBig(byte[] bytes){
return (bytes[0] & 0xFF) << 24) |
((bytes[1] & 0xFF) << 16) |
((bytes[2] & 0xFF) << 8) |
((bytes[3] & 0xFF);
}
public byte[] intToByteBig(int value){
return new byte[]{(byte)(value >> 24),(byte)(value >> 16),(byte)(value >> 8),(byte)value};
}
// 小端解析方式
public int byteToIntLittle(byte[] bytes){
return ((bytes[0] & 0xFF) |
((bytes[1] & 0xFF) << 8) |
((bytes[2] & 0xFF) << 16)|
(bytes[3] & 0xFF) << 24);
}
public byte[] intToByteLittle(int value){
return new byte[]{(byte)value,(byte)(value >> 8),(byte)(value >> 16),(byte)(value >> 24)};
}
- short|byte 相互转换
public bytes shortToByte(short value) {
byte[] bytes = new byte[2];
byte[0] = (byte) (0xff & (value >> 8))
byte[1] = (byte) (0xff & value)
return bytes;
}
- 对位的操作
/**
* 获取指定位上的数值(注意index的值为要去的某一位上的数据值)
* @param num:要获取二进制值的数
* @param index:倒数第一位为0,依次类推
*/
public int getPositionValue(int num, int index){
return (num & (0x1 << index)) >> index;
}