gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:56:27 25 4
gpt4 key购买 nike

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

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