gpt4 book ai didi

Python C API 检查 int64 是否无符号

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:32 26 4
gpt4 key购买 nike

我正在使用 Python C API 编写一个 Python3 脚本,其中包含一些计算量大的 C 部分。在处理 int64 时,我不知道如何确保输入数字是无符号 int64;也就是说,如果它小于 0。作为 official documentation建议,我将 PyArg_ParseTuple() 与格式化程序 K 一起使用 - 它检查溢出。这是我的 C 代码:

static PyObject* from_uint64(PyObject* self, PyObject*){
uint64_t input;
PyObject* output;

if (!PyArg_ParseTuple(args, "K", &input)){
return PyErr_Format(PyExc_ValueError, "Wrong input: expected unsigned 64-bit integer.");
}

return NULL;
}

但是,使用负参数调用该函数不会引发任何错误,并且输入数字会被强制转换为无符号数。例如,from_uint64(-1) 将导致 input=2^64-2。正如预期的那样,因为没有溢出检查。

可能在解析之前确定输入数字是否为负数的正确方法是什么?

最佳答案

你应该使用

unsigned long long input = PyLong_AsUnsignedLongLong(args);

然后您可以检查

if (PyErr_Occurred()) {
// handle out of range here
}

如果数字不适合 unsigned long long

另见 the Python 3 API documentation on Integer Objects

关于Python C API 检查 int64 是否无符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52668426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com