我需要从加速度计读取所有 3 个轴(X、Y、Z)上的加速度,以 m/s2 为单位的浮点值。引用设备文档:
每个轴的数据使用两个字节。范围设置为±16g。来自 G 传感器(14 位精度)的数据以补码表示法 表示。例如:
0x00 0x4D
表示 0.36 m/s2
0xFF 0xEC
表示 -0.10 m/s2
0xFD 0xFB
表示 -7.39 m/s2
Netty ByteBuf
进行上述示例的转换。不幸的是 readFloat()
无法使用,因为它会尝试读取 4 个字节而不是 2 个字节。
请指导我如何从 2 字节十六进制获取正确的浮点值。
一些数学:
G = input / 0x8000 * 16 = input / 2048.0
input
是整数类型)1G = 9.81m/s²
; a = 9.81 * input / 2048.0
a = input * 9.81 / 2048.0
)此代码(如果需要)可以是:
double convert(short input) {
return input * 9.81 / 2048.0;
}
这将为前两个值提供正确的结果,但不会为
0xFD 0xFB
提供正确的结果 - 您确定 -7.39 m/s²
正确吗?我有-2.48m/s²
我不知道 Netty
ByteBuf
,但它也有一个 readShort()
,它应该读取尽可能短的字节,可以提供给上述方法(或者直接转换 - 该方法并不是真正需要的)