【问题标题】:Wrong checksum calculated after migrating code to C extension for python 3将代码迁移到 python 3 的 C 扩展后计算的校验和错误
【发布时间】: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


【解决方案1】:

在发布这个问题时,我认为这可能是因为 char* 和 unsigned char* 指针的差异。我刚刚尝试通过将 char* 指针转换为 unsigned char* 指针来实现该解决方案。仅在计算校验和时才这样做,瞧!成功了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 2015-01-30
    • 2021-05-08
    • 2021-04-05
    • 2020-06-25
    • 1970-01-01
    • 2010-12-18
    相关资源
    最近更新 更多