Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将uint16重新解释为具有14个小数位的定点_Python_Fixed Point - Fatal编程技术网

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

在Python中将uint16重新解释为具有14个小数位的定点,python,fixed-point,Python,Fixed Point,我正在从一个系统向另一个系统发送数据(带符号的16位定点,含14个小数位)。由于限制,数据在传输之前必须重新解释为uint16(即,位表示相同)。数据以Python结束,但我正在努力找到一种方法将其重新解释为原始形式 例如: 原始值为-0.123,用值重新解释为uint16 63521 如何使用Python将其转换回值-0.123 还有一些例子吗 将其转换回的一种可能方法是: def Q2_14toFloat(x): # convert unsigned to signed x

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

例如: 原始值为
-0.123
,用值重新解释为uint16
63521

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

还有一些例子吗
将其转换回的一种可能方法是:

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

你能再举几个例子吗?仅举一个例子,16位定点实际上还不够,因为它留下了太多的可能性。例如:二进制还是BCD?2的补码还是符号和大小?大端还是小端?再举几个例子,我们就能得出答案了。是的,没问题。原始数据是有符号的,big-endian。不是2的赞美。实际上我不确定它是BCD编码还是二进制编码,但我怀疑是后者。我用更多的例子编辑了我的问题。谢谢你确定这不是2的补码吗
-0.9870->49365
49365->-16171/2^14=0.986999
一致是的,你是对的,我不确定我怎么会错过这个。这是一个伟大而简单的解决方案,解决了我的一大难题-谢谢!
def Q2_14toFloat(x):
    # convert unsigned to signed
    x = (x ^ 0x8000) - 0x8000
    # scale
    return x * (1.0 / 16384.0)