我有这样的C ++类方法:
class BinaryData
{
public:
...
void serialize(unsigned char* buf) const;
};
serialize
函数只是将二进制数据作为unsigned char*
获取。我使用SWIG包装此类。
我想在python中将二进制数据读取为
byte array
或int array
。Python代码:
buf = [1] * 1000;
binData.serialize(buf);
但是发生了无法转换为
unsigned char*
的异常。如何在python中调用此函数?
最佳答案
最简单的方法是在Python中进行转换:
buf = [1] * 1000;
binData.serialize(''.join(buf));
可以开箱即用,但是根据Python用户的期望可能不佳。您可以在inside Python code中使用SWIG解决此问题,例如与:
%feature("shadow") BinaryData::serialize(unsigned char *) %{
def serialize(*args):
#do something before
args = (args[0], ''.join(args[1]))
$action
#do something after
%}
或在生成的界面代码中,例如使用buffers protocol:
%typemap(in) unsigned char *buf %{
// use PyObject_CheckBuffer and
// PyObject_GetBuffer to work with the underlying buffer
// AND/OR
// use PyIter_Check and
// PyObject_GetIter
%}
根据您偏爱的编程语言和其他特定情况的限制,您个人愿意这样做。