将代码迁移到Python 3的C扩展后计算错误的校验和

我是python C扩展代码的新手,并将基于旧的基于python 2.7的c扩展代码迁移到使用Visual Studio 2015的基于python 3.6的c扩展代码。

旧代码中的步骤 -

  • 在初始化函数时使用METH_OLDARGS
  • 使用PyArg_Parse(args,“O”,&pyData)解析输入,该输入是从python 2.7代码传入并在C代码中接受为PyObject的字符串。
  • 使用PyString_AsStringAndSize将输入数据转换为无符号字符*
  • 循环无符号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 *指针来实现该解决方案。 这只是在计算校验和时才这样做! 有效!

    链接地址: http://www.djcxy.com/p/65011.html

    上一篇: Wrong checksum calculated after migrating code to C extension for python 3

    下一篇: Best approach to FIFO implementation in a kernel OpenCL