如何使用 fseek() 正确移动 fread() 函数中的指针? (C)

How do I use fseek() to move the pointer in a fread() function properly? (C)

我正在尝试使用 fseek() 函数将指针移动到 fread() 以使 fread() 获取数据并将其传递给 fwrite() n 次.具体来说,我需要将 bmp 放大 n 倍。

所以为了进行垂直放大,我尝试使用 fseek().

fread() 指针向后移动输入 BMP 的宽度

输入输出数据均为24bit BMP

fseek(inputPointer, lineBytes, SEEK_CUR);

为了计算偏移量,我使用了 sizeof(pixel) * BMP 的宽度 * -1。

我的两个主要问题如下:

  1. 如何检查指针在一行代码中的当前位置?
  2. fread() 是实际移动通过它的指针还是只读取从指针到文件末尾的所有内容?
  1. How do I check the current position of a pointer in a line of code?

从你问题的上下文来看,我想你是在问如何找到流的当前位置。这就是 ftell()fgetpos() 的目的。前者是更常规地与 fseek():

配对的那个
long offset = ftell(my_file);
  1. Does fread() actually move the pointer passed through it or just reads everything from the pointer to end of file?

使用更传统的术语 "offset" 而不是 "pointer" 可能会对您有所帮助。在任何情况下,当前文件偏移量都描述了文件开头之后的多少字节是将要读取或写入的下一个字节。因此,如果偏移量为 0,则读取的下一个字节将是文件中的第一个字节;如果偏移量为 16,那么下一个读取的字节将是第 17th(跳过或已经读取前 16 个)。 fread() 可能会也可能不会从那里一直读到文件末尾,这取决于它的参数和文件的长度。

I'm attempting to move the fread() pointer back by the width of the input BMP [...] To calculate the offset, I used sizeof(pixel) * width of BMP * -1.

根据您的代码,我想您的意思是您希望将文件偏移移动 ​​BMP 的宽度 以像素为单位 ,否则乘以 sizeof(pixel) 没有任何意义。即便如此,这可能不是正确的因素。 sizeof(pixel) 测量 程序 表示 pixel 的大小(无论是什么),这可能与文件中 占用的大小不同 一个像素。如果它们确实不同,那么后者就是您想要的。

此外,如果您想将偏移量向前或向后更改一行,那么 -1 对我来说毫无意义。 (无论您在 (2) 中询问的单个文件偏移值的具体意义如何,因为当您计算两个偏移之间的差异时它就会消失)。