龙空技术网

python3中ctypes的结构体和联合体

鸭绿江战士 281

前言:

今天小伙伴们对“c语言中的联合体”都比较看重,你们都想要了解一些“c语言中的联合体”的相关内容。那么小编同时在网络上网罗了一些有关“c语言中的联合体””的相关资讯,希望同学们能喜欢,小伙伴们一起来了解一下吧!

结构体

结构和联合是非常重要的数据类型,被大量的适用于 WIN32 的 API 和 Linux 的 libc 中。 一个结构变量就是一组简单变量的集合 (所有变量都占用空间)

这是c语言中的结构体,如下代码所示

struct test{ int amt_barley;  int amt_water;};

而在ctypes中创建一个类继承ctypes中的Structure

class test(Structure):  _fields_ = [ 			 ("a", c_int),  ("b", c_int), ]

下图为python中结构体及使用

也可以如下图所示,创建变量的时候不传值,结构体中变量默认为0,然后通过打点调用的方式赋值就可以改变值

ctypes 很简单的就创建了一个 C 兼容的结构。

联合体

联合和结构很像。但是联合中所有变量同处一个内存地址,只占用一个变量的内存空间,这个空间的大小就是最大的类型的大小。这样就能够将联合作为不同类型的变量操作访问了。

c语言中声明联合体。

union { long a;  int b; char c[8];}test;

下图为ctypes中的联合体及使用

若给其中一个赋值,则其他两个也会发生改变,因为开始地址是一样的

给联合赋一个值就能得到三种不同的表现方式。最后一个i.c 输出的结果是 B, 因为 66 刚好是 B 的 ASCII 码。

联合体中的c成员同时也是个数组,一个八个字符大小的数组。在 ctypes 中申请一个数组, 只要简单的将变量类型乘以想要申请的数量就可以了。在联合体里公用一段内存。

标签: #c语言中的联合体