将代码迁移到 python 3 的 C 扩展后计算出错误的校验和
Wrong checksum calculated after migrating code to C extension for python 3
我是 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* 指针的不同。我只是尝试通过将 char* 指针转换为 unsigned char* 指针来实现该解决方案。仅在计算校验和时才这样做,瞧!成功了!
我是 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* 指针的不同。我只是尝试通过将 char* 指针转换为 unsigned char* 指针来实现该解决方案。仅在计算校验和时才这样做,瞧!成功了!