您的位置:首页 > 编程语言 > Python开发

5.Python对应C的结构体,联合体

2019-11-25 09:12 169 查看
  1. 结构体

    一般结构体都继承自这几个类。

    BigEndianStructure, LittleEndianStructure,Structure

    然后属性名为_fields_的集合,集合的单个元素是一个二元组。

    python代码

    from ctypes import *
    class Test(Structure):
    _fields_ = [("a",c_int),("b",c_int)]
    handle = CDLL("./test.dll")
    handle.test.restype = Test
    handle.test.argtypes= [c_int]
    ret = handle.test(2)
    print(ret.a,ret.b)
    """
    1 2
    hello test2
    [Finished in 0.1s]
    """

    C++代码

    #include<stdio.h>
    struct Test
    {
    int a;
    int b;
    Test(int x = 1,int y = 2)
    {
    a = x;
    b = y;
    }
    };
    extern "C"  Test test(int n)
    {
    printf("hello test%d\n",n);
    return Test();
    }

    编译代码g++ -shared -fPIC -m32 -o test.dll test.cpp

  2. 结构体指针 byref(struct),生成一个指针,一般用作传入参数。

    pointer(struct),生成一个指针,这个是用来直接生成的,类似 int* = (&int_var).常用于生成一个指针

    POINTER(type)(init_value),常用语生成一个数组。

    生成数组长度为1的指针POINTER(c_int)(c_int(0))

    生成数组长度为n的指针POINTER(c_int)( (c_int*n)()),类比C++的POINTER<c_int>(new c_int
    ())

  3. 对齐方式

    通过属性_pack_设置,和#param pack()一样。正整数。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ctypes Python