在 Python 中将 uint16 重新解释为具有 14 个小数位的定点

Reinterpret uint16 as fixed-point with 14 fractional bits in Python

我正在从一个系统向另一个系统发送数据(带符号的 16 位定点和 14 个小数位)。由于限制,数据在传输之前必须重新解释为 uint16(即位表示相同)。数据以 Python 结束,但我正在努力寻找一种方法将其重新解释回其原始形式。

例如: 原值为-0.123,重新解释为uint16 with value 63521.

如何使用 Python 将其转换回值 -0.123

更多示例

1.0450  -> 17121
0.9870  -> 16171
-0.9870 -> 49365

一种可能的转换方式是:

def Q2_14toFloat(x):
    # convert unsigned to signed
    x = (x ^ 0x8000) - 0x8000
    # scale
    return x * (1.0 / 16384.0)