gpt4 book ai didi

python - SWIG:传递二进制数据失败

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:25 25 4
gpt4 key购买 nike

我正在使用一个 C-Library,它带有由 swig 生成的 python bindings。我想将任意 python 字符串传递给 C-Library。此字符串包含不可打印的字符,例如:

\xff\x0A\82

C-Library 使用char 来处理这些数据。为了进行转换,我使用以下 swig typemap:

%typemap(in) (char *data, int size)
{
if(!PyUnicode_Check($input))
{
PyErr_SetString(PyExc_ValueError, "String value required");
return NULL;
}

$1 = PyBytes_AsString(PyUnicode_AsUTF8String($input));
$2 = PyUnicode_GetSize($input);
}

这部分有效。只有 0x000x7F 之间的值有效。值 0xFF 被转换为错误值,即 0xC3

有没有人建议让 0x000xFF 工作?

最佳答案

Unicode 字符串 '\xff' 完全按照您的编码转换为 UTF-8 字节序列 b'\xc3\xbf'

如果要发送字节数据,使用字节串(b'\xff\x0a\x82')并使用PyBytes方法将其转换为char* 和大小:

%typemap(in) (char* data,int size) (Py_ssize_t len) %{
if(PyBytes_AsStringAndSize($input,&$1,&len) == -1)
return NULL;
$2 = (int)len;
%}

请注意,这应该适用于 32 位和 64 位 Windows,并且数据中可以包含空字节,因为大小是明确提取的,并且它处理 64 位 Py_ssize_t 的可能性。

关于python - SWIG:传递二进制数据失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16860792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com