c++ - 如何读取二进制文件的 block (未知大小)?

标签 c++

<分区>

我对二进制文件有点困惑,我知道数据以 block 的形式存储在二进制文件中,并且根据我通过实验获得的知识,我发现如果我们有一个包含这样的成员变量的结构:

struct student{
int Roll_No;
char Name[10];
}

然后用内容更新变量,并将其保存在二进制文件中二进制文件有 14 个字节,10 个字节的 char 和 4 个 int,所以如果我们在 hexeditor 中分​​析文件,文件有 4 个字节保留对于 Roll_no 和 10 个字节为 Name 保留,其中填充的内容被填充,其他可以看作是文件中的点,我的意思是如果我们像上面那样创建一个带有 struct/class 的程序,并且在将内容保存到文件之后,文件的大小与我们创建的结构相同,我的意思是 4 个 int 和 10 个 char,所以据我所知,如果我创建了一个新的图像格式,例如。 (Dot).MyIMG,从我的程序中,它的结构/类是这样的

struct MyIMG{
char Header[5];
int width, height;
int Pixels[124000];
}

然后我的程序将创建一个大小为 49613 字节或 49 千兆字节的新文件(这是标题的 5,+(加上)8 的 int 高度和宽度,+(加上)4×124000 的 int 像素),无论是像素是 4、8、100 或任何它将写入整个像素数组的值,如果为空,那么为什么这种效果在任何大型软件(如 MSpaint、Adobe photoshop)上都不能相同,它们是做什么的,这使得它们的程序写入文件大小取决于存储的像素而不是空白数组...

编辑:我现在已经编辑了我的问题,并清楚地定义了我的问题,请帮助我,在此先感谢!!

最佳答案

.png 和 .bmp 等文件格式具有特定的格式。文件格式可以指定字节布局(例如宽度为 4 个字节,高度为 4 个字节,RGBA 像素数据为 2MB,等等),或者格式可以为您提供有关各种对象大小的信息。

例如,一个 TIFF 文件将指定在文件中的特定字节偏移处有一个数字标记。然后,这些标签包含有关图像数据的大小、位置和格式的信息。所以你可能有一个固定大小的 header ,上面写着“有一个标签列表从字节 100 开始,它包含 40 个标签”。每个标签都是固定大小(例如 16 字节),因此您知道从字节 100 开始读取 40 个 16 字节的 block 。然后标签将包含信息,例如图像数据开始的字节偏移量,一个像素有多少个字节,有多少个像素。由此,您可以读取数据而无需提前知道整个格式是什么。

关于c++ - 如何读取二进制文件的 block (未知大小)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26965767/

相关文章:

c++ - 将 vera++(或其他编码约定工具)与 Qt/QtCreator 集成

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - std::thread 在无限循环中的随机时间后锁定

c++ - 使用数据流将 char 复制到 QbyteArray 包含一些额外的字节

c++ - 在 OpenGL 中缩放投影矩阵时出现意外行为

c++ - 如果使用 WS_POPUP 样式创建 Window,则永远不会传递 WM_PAINT 消息

c++ - 没有匹配函数调用 'replace(std::basic_string<char>::iterator, std::basic_string<char>::iterator, char, int)' |

c++ - 排序程序的错误代码

c++ - 如何将字符串数字转换为单个数字的 int 数组

c++ - 托管 C++ 中的运算符重载