0

指针在 Python 中并不常见,var 声明类型也不常见。我正在尝试在 Python 中执行此操作。

C++:

 ...a function
 flt32 f;
 int32 sign, exp, man, *tms;
 tms = (int *) &f;
 ...(operations)
 *tms = sign | exp | man;
 return (f);

如您所见,tms指向f数据,但只是(顺便说一句,此功能完美运行)的int一部分。float

使用 ctypes 我可以在 Python 中使用指针:

from ctypes import * 
f = c_float(12.3)
tms = pointer(f) # tms should be: tms = c_int32(value)
print tms.contents.value #12.3000001907

这里的问题是tms立即变成 的类型f,所以两个变量都是 float (tms应该是tms = c_int32(a_value))
可以使用与Python 中变量的int值匹配的指针吗?float

4

2 回答 2

2

如果您真的想在 Python 中执行此操作,您可以使用 ctypes.cast() 将浮点指针强制转换为 int 指针,或者您可以使用 struct 将浮点值打包为字符串并将其解包为 int。这是一个例子:

我使用 ctypes.cast() 将浮点值内存视为 int,并使用 struct 将其转换回:

In [5]: from ctypes import *
In [6]: f = c_float(12.3)
In [8]: tmp = cast(pointer(f), POINTER(c_int)) 
In [9]: tmp.contents
Out[9]: c_long(1095027917)
In [10]: tmp.contents.value
Out[10]: 1095027917
In [11]: hex(tmp.contents.value)
Out[11]: '0x4144cccd'

In [13]: import struct
In [16]: struct.unpack("f",struct.pack("I", 1095027917))
Out[16]: (12.300000190734863,)
于 2012-05-23T00:55:21.533 回答
1

你需要什么来获得浮点数的整数部分?只需这样做,然后:

i = int(afloat)
于 2012-05-23T00:23:18.117 回答