为什么我要从下面的函数中获取垃圾?
即将到来的 _data
论点是 byte[] = {6D, F3, B4, 15}
这个 _endian
论点是 ByteOrder.ByteOrder.LITTLE_ENDIAN
```
ByteBuffer m_ByteBuffer;
public static double ByteToDouble(byte[] _data, int offset, ByteOrder _endian){
synchronized (m_ByteBuffer) {
m_ByteBuffer.clear();
m_ByteBuffer.order(_endian);
m_ByteBuffer.position(0);
m_ByteBuffer.get(_data);
m_ByteBuffer.position(0);
}
return m_ByteBuffer.getDouble();
}
3条答案
按热度按时间pnwntuvh1#
我举了一个小例子,看看如何来回转换。
希望有帮助。
请注意
ByteBuffer#getDouble()
方法将抛出BufferUnderflowException
,如果缓冲区中剩余的字节少于8个(参见javadoc)nnt7mjpx2#
在您使用的代码中
将缓冲区的数据读入
_data
. 我想你想用的是bytebuffer此外,将数据放入缓冲区后,更常见的做法是使用flip而不是
position(0)
因为这样可以正确设置缓冲区的限制。总之,这将大致导致:vbopmzt13#
4个字节代表
float
,8字节adouble
.