我正在为 Python 3.x 构建一个 C 扩展模块。我想访问 Python 层中内置的 hex
的功能。也就是说,我想转换(形成我的 C 代码)一个类型为“PyLong_Type
”的 PyObject*
(即,一个普通的 python int
) 转换为类型为 PyUnicode_Type
的 PyObject*
并表示我开始使用的 int
的十六进制编码。
这看起来应该很容易,但是 functions in the integer section of the API guide 中没有一个似乎做到了; functions in the string section 中的任何一个都没有.请特别注意 PyUnicode_FromFormat
没有满足我的需要:
- 您不能将它与
%S
或%R
格式说明符一起使用(您将获得十进制表示形式) - 您不能将它与
%x
格式说明符一起使用(您必须将PyObject*
转换为 Cint
首先,这样做并不安全,因为 Python 整数可能太大而无法容纳。
最佳答案
这是 hex
的实现:
static PyObject *
builtin_hex(PyObject *self, PyObject *v)
{
return PyNumber_ToBase(v, 16);
}
它是静态的
,但实现建议了一种获得相同功能的简单方法:
return PyNumber_ToBase(your_number, 16);
PyNumber_ToBase
也存在于 2.6 和 2.7 中,尽管 hex
没有在 2.x 行中使用它。
关于python - 从 python C API 调用内置的 'hex',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22624822/