(1)手动转化:
当需要定义为unsigned的数据时(有符号转到无符号):
如果unsigned short是16位,value & 0xffff
如果unsigned long是32位,value & 0xffffffff
如果unsigned long是64位,value & 0xffffffffffffffff
请注意,虽然这给了你在C中的值,它仍然是一个有符号的值,因此任何后续计算都可能给出否定结果,
(2)利用ctypes 包
Python 调用 C 动态链接库,包括结构体参数、回调函数
第一步:ctypes 包准备
使用 ctypes,需要首先安装 python-dev 包;
第二步:so 文件准备
将你的 C 代码编译成 .so 文件
第三步:
from ctypes import *
so_file = cdll.LoadLibrary('./libtest.so') # 如果前文使用的是 import ctypes,则这里应该是
print('so_file class:', type(so_file))
C 代码
typedef struct _test_struct
{
int integer;
char * c_str;
void * ptr;
int array[8];
} TestStruct_st;
'TestStruct_st 的 Python 版本'
from ctypes import *
INTARRAY8 = c_int * 8
class PyTestStruct(Structure):
_fields_ = [
("integer", c_int),
("c_str", c_char_p),
("ptr", c_void_p),
("array", INTARRAY8)
]