将字节字符串从 Python 传递到 C
Passing byte string from Python to C
我正在用 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
之类的东西。
我正在用 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
之类的东西。