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



我正在尝试使用fseek()函数将指针移动到fread()fread(),以使数据fwrite()n 次。具体来说,我需要将 bmp 放大 n 的比例。

因此,为了进行垂直放大,我尝试使用fseek()fread()指针向后移动输入 BMP 的宽度。

输入和输出数据均为 24 位 BMP。

fseek(inputPointer, lineBytes, SEEK_CUR);

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

我的两个主要问题如下:

  1. 如何检查指针在代码行中的当前位置?
  2. fread()实际上是移动通过它的指针,还是只是读取从指针到文件末尾的所有内容?
  1. 如何检查指针在代码行中的当前位置?

从你问题的上下文来看,我认为你在问如何找到流的当前位置。 这将是ftell()fgetpos()的目的。 前者是与fseek()更传统的配对:

long offset = ftell(my_file);
  1. fread() 是否真的移动了通过它的指针,或者只是读取从指针到文件末尾的所有内容?

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

我正在尝试将 fread() 指针移回输入 BMP 的宽度 [...] 为了计算偏移量,我使用了sizeof(pixel) * width of BMP * -1.

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

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

最新更新