在python中模拟浮点到int的c转换操作

2024-09-28 22:07:42 发布

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

我正在尝试转换,例如: 6.09677e-321->;1234 在c语言中,您可以执行如下操作:printf("%lld", 6.09677e-321) 有没有关于如何在python中进行这种转换的想法

我试过使用ctypes,d=c_float(6.09677e-321);cast(f, c_longlong)但没有得到多少好处


Tags: gt语言floatctypescastprintflldlonglong
2条回答

Python intfloat类型不同于原始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

您还可以使用struct module进行以下操作:

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

相关问题 更多 >