如何将无符号字符串数组从C共享库返回到调用python函数

时间:2017-03-21 16:17:03

标签: python c shared-libraries ctypes

我的C计划是这样的:

#include<stdio.h>

unsigned char* test()
{
    unsigned char* abc = "\x80\x31\x00\x00\x05";
    return abc;
}

我的Python代码是:

from ctypes import *
sh_obj=cdll.LoadLibrary('./libfile.so')
sh_obj.test.restype=c_char_p

print sh_obj.test()

但我没有得到所需的输出。 目前的输出是:

1

如何获得正确的输出?我需要输出格式与输入格式相同。

1 个答案:

答案 0 :(得分:0)

您可以使用restype POINTER(c_ubyte),如下所示:

from ctypes import *
sh_obj=cdll.LoadLibrary('./libfile.so')
sh_obj.test.restype=POINTER(c_ubyte)
ret=sh_obj.test()
retl=[ret[i] for i in range(5)]
print(retl)

如果您的C test()函数返回指向字符串文字"\x80\x31\x00\x00\x05"的指针,则会打印以下内容:

[128, 49, 0, 0, 5]

是十进制的无符号字节值。