我有这样的C ++类方法:

class BinaryData
{
public:
    ...
    void serialize(unsigned char* buf) const;
};


serialize函数只是将二进制数据作为unsigned char*获取。
我使用SWIG包装此类。
我想在python中将二进制数据读取为byte arrayint 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
%}


根据您偏爱的编程语言和其他特定情况的限制,您个人愿意这样做。

08-25 08:27
查看更多