JNK*_*JNK 14 java floating-point integer casting bytearray
我有一个从x-plane通过UDP发送的字节数组.字节(4)都是浮点数或整数...我试图将它们转换为浮点数但到目前为止没有运气...
示例数组:字节数据[41] = { - 66,30,73,0};
如何将4个字节转换为int或float并且不浮动使用8个字节?
Mar*_*ers 23
我不知道您的数据的字节顺序.@ dogbane的解决方案可能有效.否则,您基本上需要根据字节的顺序将字节转换为int类型,例如:
int asInt = (bytes[0] & 0xFF)
| ((bytes[1] & 0xFF) << 8)
| ((bytes[2] & 0xFF) << 16)
| ((bytes[3] & 0xFF) << 24);
Run Code Online (Sandbox Code Playgroud)
然后你可以使用这个转换为浮点数:
float asFloat = Float.intBitsToFloat(asInt);
Run Code Online (Sandbox Code Playgroud)
这基本上是DataInputStream幕后的内容,但它假定您的字节按特定顺序排列.
OP要求澄清在这种情况下OR的位置.虽然这是一个更大的主题,可能会更好地独立研究,但我会简要介绍一下.Or(|)是一个按位运算符,其结果是通过单独或从两个操作数中的每个位得到的位组.
例如(二进制)
10100000
| 10001100
-----------
10101100
Run Code Online (Sandbox Code Playgroud)
当我建议在上面使用它时,它涉及将每个字节移动到int中的唯一位置.所以,如果你有{0x01, 0x02, 0x03, 0x04}二进制的字节{00000001, 00000010, 00000011, 00000100},你有这个:
0000 0001 (1)
0000 0010 (2 << 8)
0000 0011 (3 << 16)
| 0000 0100 (4 << 24)
--------------------------------------------------------
0000 0100 0000 0011 0000 0010 0000 0001 (67 305 985)
Run Code Online (Sandbox Code Playgroud)
当你将两个数字组合在一起并且你知道两者中没有设置两个相应的位时(这里就是这种情况),按位OR与加法相同.
Oph*_*ian 20
您可能想要使用java.nio.ByteBuffer.它有很多方便的方法可以从字节数组中提取不同的类型,并且还应该为你处理大多数字节序问题(包括必要时切换字节顺序).
byte[] data = new byte[36];
//... populate byte array...
ByteBuffer buffer = ByteBuffer.wrap(data);
int first = buffer.getInt();
float second = buffer.getFloat();
Run Code Online (Sandbox Code Playgroud)
它还具有花俏的功能,用于(通过你的字节数组转换成int数组IntBuffer从asIntBuffer()方法)或浮动阵列(通过FloatBuffer从asFloatBuffer()方法),如果你知道输入的真正意义之一类型.
| 归档时间: |
|
| 查看次数: |
24963 次 |
| 最近记录: |