gpt4 book ai didi

c - 从二进制文件读取具有动态分配变量的结构

转载 作者:行者123 更新时间:2023-11-30 17:05:29 24 4
gpt4 key购买 nike

我有 2 个结构,它们具有动态分配的变量。一个结构包含一个由第一个结构中定义的元素组成的数组。定义看起来像这样。

typedef struct entry {
char *key;
int value;
} entry;

typedef struct map {
entry **elem;
int nr_elem;
int cap;
} map;

基本上我必须从二进制格式文件中读取数据。但是,我无法立即读取整个 map block ,因为我无法指定特定大小。我唯一的信息是,我所有条目中的每个字符串键都以 \0 结尾,但是它们可能有任何大小,因此我不能对我的条目使用 fread 。鉴于我只能以二进制格式读取,对于这种情况有什么好的解决方法吗?

最佳答案

必须更精确地指定文件格式。

二进制文件格式的规范必须非常简洁:

  • 数字是如何编码的?多少字节,小端字节序还是大端字节序?
  • 字符串是如何编码和终止的?
  • 如何分隔记录?

了解这些详细信息后,请确保使用 "rb" 以二进制模式fopen 文件,并使用 fgetc( 逐字节读取文件) )。适本地处理编码。

请注意,不建议使用 fwrite 写入数字,因为写入器和读取器平台的字节顺序以及 int 的大小可能不同。

使用文本格式更加灵活。它使调试、互操作、手动创建更加变得更加容易...仅在需要时才使用二进制格式。

关于c - 从二进制文件读取具有动态分配变量的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35260285/

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