gpt4 book ai didi

c - 如何 fopen() .IMA 文件?

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

我正在使用 C 语言工作并尝试读取文件系统镜像(例如:name.IMA),并且我需要二进制形式,因为我需要逐字节读取它。在 C 中读取这些类型文件的正确方法是什么?以下不起作用:

FILE *filePointer = fopen("name.IMA","rb");
fread(buffer, fileLength, 1, filePointer);

主要问题: fread() 实际上按预期打开和读取。造成困惑的原因是 fread() 给出的返回值由于某种原因等于 1(即使读取了超过 1 个字节)。这里有什么问题吗?

最佳答案

如果您的 fread 行没有达到您的预期,我会查看 fileLength 设置的值。如果字节数多于可读取的字节数,则 fread 将返回零。

您需要记住的一件事是,fread() 返回读取的数,而不是字节数(我的重点):

size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);

On success, fread() return the number of items read. This number equals the number of bytes transferred only when size is 1.

所以这两者之间有区别:

size_t n = fread (buffer, s, 1, fp);
size_t n = fread (buffer, 1, s, fp);

第一个是读取最多 一个 个大小为 s 的元素,因此只会返回零或一个。第二个是读取最多 s 个大小为 1 的元素,因此可以返回包含 0..s 的值。

如果您想一次读取缓冲区中可以容纳的尽可能多的字节,则需要使用后者:

char buff[128];
size_t sz;
FILE *fp = fopen ("name.ima", "rb");
if (fp != NULL) {
while ((sz = fread (buff, 1, sizeof (buff), fp)) > 0)
doSomethingWith (buffer, sz);
fclose (fp);
}

关于c - 如何 fopen() .IMA 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33750333/

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