在 python 中模拟 float 到 int 的 c 强制转换操作



我正在尝试转换例如: 6.09677E-321 -> 1234 在 C 中,您可以执行以下操作:printf("%lld", 6.09677e-321)关于如何将这种转换转换为 python 的任何想法?

我尝试过使用ctypes,d=c_float(6.09677e-321);cast(f, c_longlong)但没有从中得到太多。

您也可以为此使用结构模块:

>>> import struct
# treat the value as a double
>>> packed = struct.pack("d", 6.097e-321)
>>> packed
'xd2x04x00x00x00x00x00x00'
# ...but unpack it as a long int
>>> unpacked = struct.unpack("l", packed)
>>> unpacked[0]
1234

Pythonintfloat类型不像原始的 C 数值类型。它们是成熟的对象。从这个意义上说,Python对象并没有真正的"强制转换"。但是,您可以使用ctypes来执行此操作,它本质上提供了基元 C 类型的面向对象的包装器。不过会有点复杂:

import ctypes
py_float = 6.097e-321
cf = ctypes.c_double(py_float)
lp = ctypes.cast(ctypes.pointer(cf), ctypes.POINTER(ctypes.c_int64))
py_int = lp.contents.value
print(py_int) # 1234

最新更新