python - 从 python C API 调用内置的 'hex'

标签 python c

我正在为 Python 3.x 构建一个 C 扩展模块。我想访问 Python 层中内置的 hex 的功能。也就是说,我想转换(形成我的 C 代码)一个类型为“PyLong_Type”的 PyObject*(即,一个普通的 python int) 转换为类型为 PyUnicode_TypePyObject* 并表示我开始使用的 int 的十六进制编码。

这看起来应该很容易,但是 functions in the integer section of the API guide 中没有一个似乎做到了; functions in the string section 中的任何一个都没有.请特别注意 PyUnicode_FromFormat 没有满足我的需要:

  • 您不能将它与 %S%R 格式说明符一起使用(您将获得十进制表示形式)
  • 您不能将它与 %x 格式说明符一起使用(您必须将 PyObject* 转换为 C int首先,这样做并不安全,因为 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/

相关文章:

python - 使用预定义的 header 将列表字典转换为 pandas.DataFrame

python - 在庞大的数组中寻找最近的数组

python - PyCharm:列出一个类的所有方法的所有用法

Python/Pygame - 跳转键并不总是注册

c - 生产者/消费者使用信号量

c - 屏幕上看不到实心球体

c++ - 了解 OPT 算法

python - Django 自定义应用程序配置

c - C语言语句的求值

c - 释放一个字符串数组给出 SIGABRT