Redhat6.3上的Python2.6
我有一个设备,它在两个内存寄存器中保存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号
一个完美的cromultent数,但是有时内存值是这样的
寄存器1;16282寄存器2;1147
使用这个函数会产生一个浮点数
1.46726675314e-36
这是一个非常小的数字,而不是一个看起来正确的数字。这个装置应该在1.2,1.3范围内产生读数。
我试图解决的问题是,设备是否抛出了虚假的值,或者我得到的值是否正确,但我使用的函数无法正确转换它们。
还有什么更好的方法可以做到这一点,比如用纽比或者其他类似的东西?
我将举起手来,说我刚刚从网上的示例中复制了这段代码,我对它的工作原理知之甚少,但是它似乎在我当时可用的测试用例中工作。
谢谢你。