我的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
如何获得正确的输出?我需要输出格式与输入格式相同。
答案 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]
是十进制的无符号字节值。