我目前正在尝试用 C++ 编写一个 .bmp 文件,并且在大多数情况下它都可以工作,但是,只有一个问题。当我开始尝试保存具有不同宽度和高度的图像时,一切都变得歪斜,我正在努力解决它,所以有没有办法强制将某些内容写入特定字节(在它和最后写入的内容之间添加填充) ?
最佳答案
有几种明显的答案,例如将数据保存在内存中的缓冲区中,然后将所需的值放入 bufr[offset]=mydata;
。我假设您想要比这更高级的东西,因为例如,您在流式应用程序中执行此操作,您不能同时将整个对象存储在内存中。
在这种情况下,您正在寻找的是 fseek(3) 和 ftell(3) 提供的魔法(参见 man pages )。将文件定位为特定的偏移量; tell 获取文件的当前偏移量。如果它是 18 的常量偏移量,那么您只需完成文件,然后执行
fseek(fp, 18L, SEEK_CUR)
其中fp
是文件指针,SEEK_CUR
是在stdio.h
中声明的常量,18
是数字 18。
更新
顺便说一句,这是基于系统调用lseek(2)。让人们感到困惑的事情(读作“我”,直到我一直在搜索我才记得这一点)是没有匹配的“ltell(2)”系统调用。相反,要获取当前文件偏移量,您可以使用
off_t offset;
offset = lseek(fp, 0L, SEEK_CUR);
因为 lseek 在其操作后返回偏移量。上面的示例代码给了我们从当前偏移量移动0字节后的偏移量,这当然是当前偏移量。
更新
啊哈,C++。你说的是C,对于C++来说,有seek和tell的成员函数。查看fstream man page.
关于c++ - 编写二进制文件 C++,强制某些内容位于字节 18 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3435002/