【发布时间】:2018-03-22 06:11:49
【问题描述】:
我是 python C 扩展代码的新手,我使用 Visual Studio 2015 将旧的基于 python 2.7 的 c 扩展代码迁移到基于 python 3.6 的 c 扩展代码。
旧代码中的步骤 -
- 在初始化函数时使用 METH_OLDARGS
- 使用 PyArg_Parse(args,"O",&pyData) 解析输入,它是 从 python 2.7 代码传递并在 C 代码中作为 PyObject 接受的字符串。
- 使用 PyString_AsStringAndSize 将输入数据转换为 unsigned char*
- 循环 unsigned char* 变量并计算校验和
新迁移代码中的步骤 -
- 在初始化函数时使用 METH_VARARGS
- 使用 PyArg_ParseTuple(args, "O", &pyData) 解析以字节为单位的输入,从 python 3.6 代码传递并在 C 代码中作为 PyObject 接受。
- 使用 PyBytes_AsStringAndSize 将输入数据转换为 char*
- 循环 char* 变量并计算校验和
使用新代码,我得到错误的校验和。迁移代码中的新步骤是否正确?是因为 char* 和 unsigned char* 指针的不同吗?谁能指导我如何计算正确的校验和?
【问题讨论】:
-
将
char *转换为unsigned char *。 -
如果您使用
"O"格式,为什么ParseTuple 中有data_lken?您在哪里进行此迁移 -
感谢您的快速回复。你是对的......这不是必需的。正如我在问题中提到的那样,我是 python C 扩展的新手......所以学习和尝试不同的东西......它被遗漏了。感谢您的投入。
标签: c python-3.6 python-c-api