gpt4 book ai didi

C二进制文件读取: How many bytes should I move?

转载 作者:行者123 更新时间:2023-11-30 16:20:40 25 4
gpt4 key购买 nike

假设我有一个使用 C 语言处理二进制文件的程序。

假设我在这个二进制文件中有 8 个对象(每个对象都是一个结构记录类型),并且我已经读取了 8 个对象中的前 3 个对象。(通过读取 8 个对象中的 3 个对象,我的意思是我已经读取了它并存储将它们放入数组中)

我知道为了读取二进制文件的后续内容,我必须使用 fseek 调用来实现此目标。我感到困惑的是,假设我想读取 8 个对象中的第 4 个对象,我应该使用 fseek 调用移动/跳过多少字节/对象?

我应该打电话吗

fseek(fp, sizeof(struct record) * 3, SEEK_SET);

fseek(fp, sizeof(struct record) * 4, SEEK_SET);

最佳答案

通常最好将这些内容写下来,以了解内存映射的工作原理,因此让我们尝试表示该文件(假设每个结构的大小为 4 个字节):

byte:   |A-0|A-1|A-2|A-3|B-0|B-1|B-2|B-3|C-0|C-1|C-2|C-3|D-0|D-1|D-2|D-3|E....
----------------------------------------------------------------------
struct: | struct A |struct B |struct C |struct D |s...
----------------------------------------------------------------------
address:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

从视觉表现中可以看出,该文件是从 0 开始索引的即第一个结构体位于地址 0 (sizeof(struct record) * 0)第二个位于地址 4 (sizeof(struct record) *1)等等...

从这里可以导出第 n 个元素 offset = ( sizeof(struct record) * ( n - 1) )

希望它能更清楚地说明...

关于C二进制文件读取: How many bytes should I move?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55216007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com