整数:PyLong_FromLong
和 PyLong_AsLong
- 类型检查函数:
PyLong_Check()
int cppInt = 42;
// C++ 整数转换为 Python 整数对象
PyObject* pyInt = PyLong_FromLong(cppInt);
// Python 整数对象转换为 C++ 整数
long cppIntFromPy = PyLong_AsLong(pyInt);
Py_DECREF(pyInt);
浮点数:PyFloat_FromDouble
和 PyFloat_AsDouble
- 类型检查函数:
PyFloat_Check()
double cppDouble = 3.14;
// C++ 浮点数转换为 Python 浮点数对象
PyObject* pyFloat = PyFloat_FromDouble(cppDouble);
// Python 浮点数对象转换为 C++ 浮点数
double cppDoubleFromPy = PyFloat_AsDouble(pyFloat);
Py_DECREF(pyFloat);
字符串:PyUnicode_FromString
和 PyUnicode_AsUTF8
- 类型检查函数:
PyUnicode_Check()
在进行字符串转换时,确保使用正确的字符编码。Qt 的 QString
通常使用 UTF-16 编码,而 Python 的字符串对象使用 UTF-8 编码。
QString cppStr = "Hello, Python!";
// C++ 字符串转换为 Python 字符串对象
PyObject* pyStr = PyUnicode_FromString(cppStr.toUtf8().constData());
// Python 字符串对象转换为 C++ 字符串
const char* cppStrFromPy = PyUnicode_AsUTF8(pyStr);
qDebug() << "C++ string from Python string:" << QString(cppStrFromPy);
Py_DECREF(pyStr);
列表:使用 PyList_*
系列函数
- 类型检查函数:
PyList_Check()
// 创建一个 Python 列表
PyObject* pyList = PyList_New(0); // 创建一个空列表
PyList_Append(pyList, PyLong_FromLong(1)); // 添加元素 1
PyList_Append(pyList, PyLong_FromLong(2)); // 添加元素 2
PyList_Append(pyList, PyLong_FromLong(3)); // 添加元素 3
// 访问 Python 列表中的元素
for (Py_ssize_t i = 0; i < PyList_Size(pyList); ++i)
{
PyObject* item = PyList_GetItem(pyList, i);
long value = PyLong_AsLong(item);
qDebug() << "List item" << i << ":" << value;
}
Py_DECREF(pyList);
字典:使用 PyDict_*
系列函数
- 类型检查函数:
PyDict_Check()
// 创建一个 Python 字典
PyObject* pyDict = PyDict_New();
// 添加键值对 "key1": 1
PyDict_SetItemString(pyDict, "key1", PyLong_FromLong(1));
// 添加键值对 "key2": 2
PyDict_SetItemString(pyDict, "key2", PyLong_FromLong(2));
// 访问 Python 字典中的元素
PyObject* pyValue = PyDict_GetItemString(pyDict, "key1");
if (pyValue)
{
long value = PyLong_AsLong(pyValue);
qDebug() << "Value for key1:" << value;
}
Py_DECREF(pyDict);
标签:类型转换,FromLong,Qt,PyLong,Python,C++,PyObject,PyList
From: https://blog.csdn.net/qq_68194402/article/details/140871380