在读取流数据或者传感器设备时我们经常需要把设备的字节数组数据转换为int或者float类型,下面
的方法提供了以下几个常用的方法。
intToByte
public static byte intToByte(int x) {
return (byte) x;
}
// 输入:十进制
// -2130640385<------a
int a = -2130640385;
// 二进制:
1000 0001 0000 0001 0000 0001 1111 1111
// 输出:
byte b1 = intToByte(a);
// b1----> -1
// 因为后8位都是1,所以b1为 -1.
byteToInt
public static int byteToInt(byte b) {
//byte 是有符号数-》转为无符号数
return b & 0xFF;
}
// 输入:十进制
// -1<------a
int a = -1;
// 二进制:
1111 1111
// 输出:
byte b1 = byteToInt(a);
// b1----> 255
// b1----> 0000 0000 0000 0000 0000 0000 1111 1111
intToByteArray
public static byte[] intToByteArray(int a) {
return new byte[]{
(byte) ((a >> 24) & 0xFF),
(byte) ((a >> 16) & 0xFF),
(byte) ((a >> 8) & 0xFF),
(byte) (a & 0xFF)
};
}
// 输入:十进制
// -2130640385<------a
int a = -2130640385;
// 二进制:
1000 0001 0000 0001 0000 0001 1111 1111
// 输出:
byte b1 = intToByteArray(a);
// b1----> bytes:[-127,1,1,-1]
byteArrayToInt
//这里不是固定的形式,需要根据数的表示形式,大数端或者小数端或者其他。。。来动态调整读取byte的格式。
public static int byteArrayToInt(byte[] b) {
return b[3] & 0xFF |
(b[2] & 0xFF) << 8 |
(b[1] & 0xFF) << 16 |
(b[0] & 0xFF) << 24;
}
输出输入正好和上面的intToByteArray相反。
byteArrayToFlaot
// 转换标准 IEEE 754
// 先转换为int,在转为flaot
public static float toFloat(byte[] bytes) {
return Float.intBitsToFloat((bytes[0] & 255) << 8 | bytes[1] & 255 | (bytes[2] & 255) << 24 | (bytes[3] & 255) << 16);
}
输入: [79, -64, -56, 67]
// 1100 1000 0100 0011 0100 1111 1100 0000
// -56 67 79 -64
sign:1 --> -1
Exponent:144 --> 17
Mantissa: 4411328-->1.5258712768554688
输出:-199999.0
2的17次方 * 1.5258712768554688 = 199,998.9999999997444096
图片来源于网络,仅供学习交流。