在Python中,可以使用一个只与浮点变量的int值匹配的指针吗?

2024-10-04 03:19:52 发布

您现在位置:Python中文网/ 问答频道 /正文

指针在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数据,但只是floatint部分(顺便说一句,这个函数工作得很好)。

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

^{pr2}$

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


Tags: 声明类型returnvarfunctionfloatint指向
2条回答

你需要什么,得到一个浮点数的整数部分?就这样做,然后:

i = int(afloat)

如果您真的想在Python中实现这一点,可以使用ctypes.cast()将浮点指针转换为int pointer,也可以使用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,)

相关问题 更多 >