Redhat 6.3 上的 Python 2.6
我有一个设备可以在 2 个内存寄存器中保存 32 位浮点值,分为最高有效字和最低有效字。我需要将其转换为浮点数。我一直在使用在 SO 上找到的以下代码,它与我在其他地方看到的代码相似
#!/usr/bin/env python
import sys
from ctypes import *
first = sys.argv[1]
second = sys.argv[2]
reading_1 = str(hex(int(first)).lstrip("0x"))
reading_2 = str(hex(int(second)).lstrip("0x"))
sample = reading_1 + reading_2
def convert(s):
i = int(s, 16) # convert from hex to a Python int
cp = pointer(c_int(i)) # make this into a c integer
fp = cast(cp, POINTER(c_float)) # cast the int pointer to a float pointer
return fp.contents.value # dereference the pointer, get the float
print convert(sample)
寄存器值的一个例子是;
寄存器 1;16282 寄存器 2;60597
这会产生结果浮点数
1.21034872532
一个完美的数字,但有时内存值类似于;
寄存器 1;16282 寄存器 2;1147
其中,使用此函数会导致浮点数;
1.46726675314e-36
这是一个非常小的数字,而不是一个看似正确的数字。该设备应产生 1.2、1.3 范围内的读数。
我要解决的是设备是否抛出虚假值,或者我得到的值是否正确但我使用的函数无法正确转换它们。
还有没有更好的方法来做到这一点,比如 numpy 或类似的东西?我会举手说我刚刚从网上的示例中复制了这段代码,我对它的工作原理知之甚少,但它似乎在我当时可用的测试用例中工作。
谢谢你。