ctypes 数据类型和 C数据类型 对照表
ctypes type | C type | Python type |
---|---|---|
_Bool | bool (1) | |
char | 1-character string | |
wchar_t | 1-character unicode string | |
char | int/long | |
unsigned char | int/long | |
short | int/long | |
unsigned short | int/long | |
int | int/long | |
unsigned int | int/long | |
long | int/long | |
unsigned long | int/long | |
__int64 or long long | int/long | |
unsigned __int64 or unsigned long long | int/long | |
float | float | |
double | float | |
long double | float | |
char * (NUL terminated) | string or None | |
wchar_t * (NUL terminated) | unicode or None | |
void * | int/long or None
|
//C++文件
#includeusing namespace std;//该文件名称:cpptest.cpp//终端下编译指令://g++ -o cpptest.so -shared -fPIC cpptest.cpp//-o 指定生成的文件名,-shared 指定微共享库,-fPIC 表明使用地址无关代码extern "C"{ //在extern “C”中的函数才能被外部调用 int test(int int_test,char char_test,char *test_string,int int_arr[4],char char_arr2[2][2]) { cout<<"输出参数中的int型:"; cout< <
//py文件
import ctypesmylib = ctypes.cdll.LoadLibrary("cpptest.so")char_p_test = bytes("中国","utf8")#汉字需用采用utf8编码int_arr4 = ctypes.c_int*4int_arr = int_arr4()int_arr[0] = 1int_arr[1] = 3int_arr[2] = 5int_arr[3] = 9char_arr2 = ctypes.c_char*2char_arr22 = char_arr2*2char_arr22a = char_arr22()char_arr22a[0][0] = b'a'char_arr22a[0][1]= b'b'char_arr22a[1][0] = b'c'char_arr22a[1][1] = b'd'mylib.test(9999,'a',char_p_test,int_arr,char_arr22a)
参考:
结构体传参
https://www.jb51.net/article/52513.htm
https://www.programcreek.com/python/example/1243/ctypes.c_char_p