我正在用 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
类对象,不包括 bytearray
和mmap.mmap
s。
关于python - 将字节字符串从 Python 传递到 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60197701/