python - 将字节字符串从 Python 传递到 C

标签 python c python-3.x python-c-api python-extensions

我正在用 C 编写一个 python 扩展,并且尝试将一个字节对象传递给我的函数。显然 's' 标记用于字符串;我尝试过“O”、“N”和其他一些方法,但没有成功。是否有一个标记可以用来解析字节对象?如果没有,是否有替代方法来解析字节对象?

static PyObject *test(PyObject *self, PyObject *args)
{
    char *dev;
    uint8_t *key;

    if(!PyArg_ParseTuple(args, "ss", &dev, &key))
        return NULL;

    printf("%s\n", dev);

    for (int i = 0; i < 32; i++)
    {
          printf("Val %d: %d\n", i, key[i]);
    }

    Py_RETURN_NONE;
}

从 python 调用:test(b"device", f.read(32))

最佳答案

如果您阅读 parsing format string docs ,很清楚。

s 仅用于从 str 对象获取以 NUL 结尾的 UTF-8 编码的 C 样式字符串(因此它适合您的第一个参数,但不是第二个)。

y* 在文档中特别指出(在原文中强调):

This is the recommended way to accept binary data.

y# 也可以工作,但代价是要求调用者提供不可变的 bytes 类对象,不包括 bytearraymmap.mmaps。

关于python - 将字节字符串从 Python 传递到 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60197701/

相关文章:

python - 我无法在 python 中使用遗传算法得到正确答案

python - 在 GridSearchCV 中明确指定测试/训练集

python - 检查对象在列表中是否出现超过 2 次

Python 委托(delegate)模式——如何避免循环引用?

python - 类型检查动态添加的属性

c - void** 是 ANSI-C 中可接受的类型吗?

html - 如何通过 beautifulsoup 过滤符合条件的 url 链接?是否可以?确实是的

c++ - Libjpeg 错误 - 在状态 205 中调用不当

c - __atomic_load_n 和 __atomic_load 之间的区别

python-3.x - 折叠 Pandas 数据框中的行