我正在用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))
。
如果您阅读parsing format string docs,这很清楚。
[s
仅用于从NUL
对象获取str
终止的UTF-8编码的C样式的字符串(因此它适合您的第一个参数,但不适合第二个参数)。
[y*
在文档中特别用(在原始文本中强调):]
这是接受二进制数据的推荐方法。
y#
也可以工作,但需要调用者提供不可变的bytes
类对象,但不包括bytearray
和mmap.mmap
s之类的东西。