c++ - 编写二进制文件 C++,强制某些内容位于字节 18 的方法?

标签 c++ binary

我目前正在尝试用 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/

相关文章:

c# - 多个项目依赖于同一二进制引用的解决方案

python - Python 中的二进制到 ASCII

c++ - 重载二元运算的正确方法

binary - 使用门级图理解二进制乘法器

c++ - 为什么将 swap() 实现为非抛出

c++ - 在/proc/net/udp 中获取用于查找的 inode

c++ - 单应性投影矩阵

c++ - boost 池单例 RequestedSize 设置

c++ - C stat() 和夏令时

xcode - 嵌入式二进制