C++ 需要帮助了解向量在二进制[C+;+;]中的表示方式吗

C++ 需要帮助了解向量在二进制[C+;+;]中的表示方式吗,c++,vector,binary,hex,C++,Vector,Binary,Hex,我试图学习如何破解文件格式,因此我从一个简单的例子开始: 我可以清楚地找到姓名(6a 6f 68 6e 00 cc)和年龄(00 00 00 00 35 40),但是我在找到等级值时遇到了很多麻烦。我想,通过制作第二个具有不同值的文件,我可以找到差异,但我发现了一些我不理解的东西。将第一个学生更改为: strcpy(apprentice[0].name, "john"); apprentice[0].age = 21; apprentice[1].grades.push_back(1); app

我试图学习如何破解文件格式,因此我从一个简单的例子开始:

我可以清楚地找到姓名(6a 6f 68 6e 00 cc)和年龄(00 00 00 00 35 40),但是我在找到等级值时遇到了很多麻烦。我想,通过制作第二个具有不同值的文件,我可以找到差异,但我发现了一些我不理解的东西。将第一个学生更改为:

strcpy(apprentice[0].name, "john");
apprentice[0].age = 21;
apprentice[1].grades.push_back(1);
apprentice[1].grades.push_back(2);
apprentice[1].grades.push_back(3);
apprentice[1].grades.push_back(4);
apprentice[1].grades.push_back(5);
apprentice[1].grades.push_back(6);
我希望得到一个更大的文件,但它的大小没有改变:

6a 6f 68 6e 00 cc cc cc cc cc cc cc cc cc cc cc
00 00 00 00 00 00 35 40 40 59 8e 00 48 cf 8e 00
54 cf 8e 00 54 cf 8e 00 6a 65 72 72 79 00 cc cc
cc cc cc cc cc cc cc cc 00 00 00 00 00 00 36 40
50 85 8e 00 88 79 8e 00 ac 79 8e 00 ac 79 8e 00
6a 69 6d 6d 79 00 cc cc cc cc cc cc cc cc cc cc
00 00 00 00 00 00 38 40 50 79 8e 00 98 d0 8e 00
a4 d0 8e 00 a4 d0 8e 00
这怎么可能?我甚至尝试使用一个包含60+个元素的向量,文件大小仍然保持不变。。。任何帮助都将不胜感激

编辑:正如tux3所指出的,我实际上并没有将向量保存为二进制。我应该更加注意我复制的代码,我的坏代码

output_file.write((char*)&学徒,sizeof(学徒))

这不会像你想的那样
std::vector
将其数据放在自由存储中,而不是像数组一样放在对象本身中


因此,这里您只编写向量的元数据(其大小、容量、指向数据的指针等),而不编写数据本身。

我序列化或取消序列化向量没有问题,但我正在尝试理解当我这样做时会发生什么。@MyUsername112358
我没有问题
是的,但是你不明白。请看第一个答案。我知道我从一个接受的答案复制的代码是错误的,但这并不意味着我正在尝试序列化一个向量。在回复中找到的答案不是我想要的答案。实际上,将结构保存到文件中就是对其进行序列化。正确的序列化不会保存整个
std::vectors
,因为内容是尽可能按照实现定义的。第一步:分别处理向量中的每个元素(但这远远不够)。读一本关于序列化的书。呃,你是对的。。。我应该更加注意我从-\复制代码的链接。我会尽快接受你的答复。
strcpy(apprentice[0].name, "john");
apprentice[0].age = 21;
apprentice[1].grades.push_back(1);
apprentice[1].grades.push_back(2);
apprentice[1].grades.push_back(3);
apprentice[1].grades.push_back(4);
apprentice[1].grades.push_back(5);
apprentice[1].grades.push_back(6);
6a 6f 68 6e 00 cc cc cc cc cc cc cc cc cc cc cc
00 00 00 00 00 00 35 40 40 59 8e 00 48 cf 8e 00
54 cf 8e 00 54 cf 8e 00 6a 65 72 72 79 00 cc cc
cc cc cc cc cc cc cc cc 00 00 00 00 00 00 36 40
50 85 8e 00 88 79 8e 00 ac 79 8e 00 ac 79 8e 00
6a 69 6d 6d 79 00 cc cc cc cc cc cc cc cc cc cc
00 00 00 00 00 00 38 40 50 79 8e 00 98 d0 8e 00
a4 d0 8e 00 a4 d0 8e 00