将 2 字节十六进制数据从 G 传感器转换为浮点数

问题描述 投票:0回答:1

我需要从加速度计读取所有 3 个轴(X、Y、Z)上的加速度,以 m/s2 为单位的浮点值。引用设备文档:

每个轴的数据使用两个字节。范围设置为±16g。来自 G 传感器(14 位精度)的数据以补码表示法 表示。例如:

    X 轴的
  • 0x00 0x4D
    表示
    0.36 m/s2
  • Y 轴的
  • 0xFF 0xEC
    表示
    -0.10 m/s2
  • Z 轴的
  • 0xFD 0xFB
    表示
    -7.39 m/s2

我正在尝试使用

Netty ByteBuf
进行上述示例的转换。不幸的是
readFloat()
无法使用,因为它会尝试读取 4 个字节而不是 2 个字节。

请指导我如何从 2 字节十六进制获取正确的浮点值。

java netty
1个回答
0
投票

一些数学:

  • 由于范围是±16G:
    G = input / 0x8000 * 16 = input / 2048.0

    (这里需要 double 假设
    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()
,它应该读取尽可能短的字节,可以提供给上述方法(或者直接转换 - 该方法并不是真正需要的)

© www.soinside.com 2019 - 2024. All rights reserved.