Python中如何使用C的结构体struct求解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中如何使用C的结构体struct求解相关的知识,希望对你有一定的参考价值。

参考技术A 閟truct就可以使用结构体了:
import struct
生成一个结构体实例:
data = struct.pack( 'format_string', struct_menber_1, struct_menber_2, ... )
其中的format_string用来指定结构体的格式(指明该结构体在C中的定义),由两部分组成:
首先是一个可选的特殊字符,用来指明字节序、数据类型大小和对齐方式:
@: native order, size & alignment (default)
=: native order, std. size & alignment
<: little-endian, std. size & alignment
>: big-endian, std. size & alignment
!: same as >
然后是指明结构体定义的部分:
The remaining chars indicate types of args and must match exactly;
these can be preceded by a decimal repeat count:
x: pad byte (no data); c:char; b:signed byte; B:unsigned byte;
h:short; H:unsigned short; i:int; I:unsigned int;
l:long; L:unsigned long; f:float; d:double.
Special cases (preceding decimal count indicates length):
s:string (array of char); p: pascal string (with count byte).
Special case (only available in native format):
P:an integer type that is wide enough to hold a pointer.
Special case (not in native mode unless 'long long' in platform C):
q:long long; Q:unsigned long long
Whitespace between formats is ignored.
如果struct模块的函数出错,将产生struct.error异常。本回答被提问者采纳

c博客06-2019-结构体&文件

1.本章学习总结(2分)

1.1 学习内容总结:

1.1.1 结构体如何定义、成员如何赋值:

  • 结构体的一般形式:
    struct 结构体名
    {
    数据类型 成员名1;
    数据类型 成员名2;
    ....
    };
  • 在结构体定义的时候,分为两种:
    1.先定义结构体类型再定义变量名:
    struct 结构体名
    {
    数据类型 成员名1;
    数据类型 成员名2;
    ....
    };
    struct 结构体名 变量名;
    eg:
    技术图片

    2.在定义结构体类型的同时定义变量:
    struct 结构体名
    {
    数据类型 成员名1;
    数据类型 成员名2;
    ....
    }变量名;
    eg:
    技术图片

  • 结构体成员的赋值:
    结构体成员的赋值可以直接赋值也可以让用户输入,直接赋值时变量则为变量名.成员名=要赋值的内容,如果是数组则需要用strcpy函数。
    用户输入则需要注意如果是单一变量则需加&,如果是数组则不需要加&,变量名还是变量名.成员名格式。

1.1.2 结构体数组排序做法:

  • 结构体数组排序与一般排序没有区别,但注意的时交换变量时要整体交换,这就可以想到两种,第一种则是傻傻地将结构体每一个变量都交换,第二种则是将要交换的两个结构体的地址交换。

1.1.3 结构体指针怎么用:

  • 结构体指针的定义:结构体类型 *p;
  • 如果一个结构体指针被赋值了结构体变量的首地址,那么这个指针变量就可以指向任意一个成员,即p->成员名=变量名.成员名

1.1.4 共用体、枚举类型做法:

  • 共用体是一种多变量共享存储空间的构造类型,它允许几种不同的变量共用同一存储空间。
  • 共用体成员可以表示多种属性。
  • 枚举类型是指变量的值可以全部列出,定义一个枚举变量后,变量的值确定在定义之中。
  • 枚举元素是常量,只能在定义阶段赋值。

1.1.5 文件读写,文件中数据如何读进结构体数组:

  • 首先定义文件指针并用fopen函数打开文件,注意如果文件为空则需要特别处理,否则对后续操作会有很大影响。
  • 其次将文件数据写入结构体数组可以用到fscanf函数或fgets函数。
  • fgets:从文件中读取一行数据存入缓冲区(fgets遇到回车才会结束,不对空格和回车做任何转换就录入到缓冲区,结束后再往缓冲区写多一个,所以它是读一行数据)
  • fscanf:从文件中读取一段数据存入缓冲区(fscanf遇到空格或回车就结束,它会把空格或回车转换为,所以它是读一小段数据)

2.综合作业--“我爱成语”(8分)

2.1 文件介绍

2.1.1 头文件介绍

  • idiom.h
    在这个头文件下,我定义了一个结构体类型和两个函数:一个查找成语,一个将成语写入结构体变量。
    按我原先的设想拿来定义多个成语操作的函数:成语的写入,成语的出题,核对题目等,奈何实力所限,就近乎空白了。
    技术图片

  • user.h
    在这个头文件下,我定义了一个结构体类型和两个函数:一个菜单,一个关于用户的操作。
    按我原先的设想拿来定义多个用户操作的函数:输入用户名的核对,密码的核对,用户的创建,用户成绩的统计,用户的排名。
    技术图片

2.1.2函数实现文件介绍

  • main.cpp
    这个文件下定义了主要的变量和进行主要的程序流程:文件的开闭,菜单等。
    技术图片
  • 函数实现.cpp
    这个文件下存放着之前定义的函数的内容。
    技术图片
    技术图片

2.2 运行结果

技术图片

2.3大作业总结

深刻认识到自己知识储量与同学的差距,以及代码量的差距,还有一直搞不懂那个文件打开错误到底怎么解决。

以上是关于Python中如何使用C的结构体struct求解的主要内容,如果未能解决你的问题,请参考以下文章

C语言函数中如何返回一个结构体类型

typedef的用法结构体

C语言中的结构体——struct

c语言如何对结构体某一成员初始化

C语言结构体(struct)简单应用个人理解

C语言结构体中struct和typedef struct有啥区别?