Cam*_*ion 4 c python arbitrary-precision python-3.x long-integer
Python / C API手册提到了来自“¹”的转换函数。和?²?空指针,这似乎是在C.使用任意长度蟒整数的唯一途径
(1):PyLong_FromVoidPtr()和格式0&与Py_BuildValue()
(2):PyLong_AsVoidPtr()和格式0,0&以及0!与PyArg_…Parse…()
但是,我还没找到吗?³?在手册中,有关如何使用这些空指针在C中使用这些任意长整数执行任何操作的任何说明。
(3):我尝试搜索«voidptr»,«void *»和«0&»,但尚未完全阅读。
我在哪里可以找到有关它们的内部结构或基元的信息以进行计算?
实际上,这些函数没有“指向任意大整数的指针”,而是从字面上仅将整数值转换为void *类型void *。请参阅实现了PyLong_FromVoidPtr和PyLong_AsVoidPtr。它只是为了允许您在Python中保留任意指针,以确保正确完成了转换。
据我所知,最实用的方法是使用int.to_bytes和从Python获取任意长整数int.from_bytes。其实有一个内部上下的API _PyLong_FromByteArray/ _PyLong_AsByteArray为您也许可以使用。参见相关问题Python扩展-有效地构造和检查大整数。
注意:有趣的是,似乎没有任何C API(官方的或其他的)来告诉Python整数值的位或字节长度。在Python中有int.bit_length,但它似乎没有映射到任何公共可用的函数。
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |