加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何使用Python的ctypes和readinto读取包含数组的结构?

发布时间:2020-12-16 23:20:25 所属栏目:Python 来源:网络整理
导读:我们有一些由C程序创建的二进制文件. 通过调用fwrite将以下C结构写入文件来创建一种类型的文件: typedef struct { unsigned long int foo; unsigned short int bar; unsigned short int bow;} easyStruc; 在Python中,我读取此文件的结构如下: class easySt
我们有一些由C程序创建的二进制文件.

通过调用fwrite将以下C结构写入文件来创建一种类型的文件:

typedef struct {
   unsigned long int foo; 
   unsigned short int bar;  
   unsigned short int bow;

} easyStruc;

在Python中,我读取此文件的结构如下:

class easyStruc(Structure):
  _fields_ = [
  ("foo",c_ulong),("bar",c_ushort),("bow",c_ushort)
]

f = open (filestring,'rb')

record = censusRecord()

while (f.readinto(record) != 0):
     ##do stuff

f.close()

这很好.我们的其他类型的文件使用以下结构创建:

typedef struct {  // bin file (one file per year)
    unsigned long int foo; 
    float barFloat[4];  
    float bowFloat[17];
} strucWithArrays;

我不确定如何在Python中创建结构.

解决方法

根据这个 documentation page(部分:15.15.1.13.数组),它应该是这样的:
class strucWithArrays(Structure):
  _fields_ = [
  ("foo",("barFloat",c_float * 4),("bowFloat",c_float * 17)]

查看该文档页面以获取其他示例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读