我正在编写一个 Python ( 2.6 ) 扩展,并且我需要将一个不透明的二进制 blob(带有嵌入的空字节)传递给我的扩展。
这是我的代码片段:
from authbind import authenticate
creds = 'foo\x00bar\x00'
authenticate(creds)
抛出以下内容:
TypeError: argument 1 must be string without null bytes, not str
下面是一些 authbind.cc:
static PyObject* authenticate(PyObject *self, PyObject *args) {
const char* creds;
if (!PyArg_ParseTuple(args, "s", &creds))
return NULL;
}
到目前为止,我已经尝试将 blob 作为原始字符串传递,例如creds = '%r' % creds
,但这不仅为我在字符串周围提供了嵌入的引号,而且还将\x00
字节转换为它们的文字字符串表示形式,我不想在 C 中搞乱。
我怎样才能完成我所需要的?我知道 3.2 中的y
,y#
和y*
PyArg_ParseTuple() 格式字符,但我仅限于 2.6。