将字节串从Python传递到C

问题描述 投票:1回答:1

我正在用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("device", f.read(32))

python c python-3.x python-c-api python-extensions
1个回答
1
投票

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

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

[y*在文档中特别用(在原始文本中强调):]

这是接受二进制数据的推荐方法。

y#也可以工作,但需要调用者提供不可变的bytes类对象,但不包括bytearraymmap.mmap s之类的东西。

© www.soinside.com 2019 - 2024. All rights reserved.