二进制文件存放一个结构体的Vector数据 用size_t获取结构体个数 有写东西想不明白

时间:2022-04-06 10:43:08
例如一个结构体
struct tag_ABC{
   wchar_t name[32];
   wchar_t Adrr[32];
   int iCount;
   ......
}ABC;

二进制文件中存储一些这样的结构数据
读取的时候如下
vector<ABC> arrABC;
........
size_t n;
fread(&n, 1,sizeof(size_t), file );
if(n>0)
{
   read(&arrABC.front,1,sizeof(ABC)*n,file  );
}

上面代码就是个伪代码,大家别纠结这个代码对不对就这意识。
我就想知道 为什么n可以读取出那个arrABC.Size()一样的在二进制中多少个ABC结构数据,然后一次给读出来?
size_t 是一个无符号int型,难道这里可以抽象出来为任意结构么?这个怎么理解,请会的人详细解释下,谢谢

4 个解决方案

#1


n能不能读出二进制文件中的ABC结构数目,那要看这个文件当初write的时候是不是先写了一个数目信息啊。如果当初文件不是这么写的,那你这样读肯定是不对的。反过来说,程序既然这样读,那说明那个文件的格式应该就是这样的。

#2


你肯定是不知道写入文件的规格吧,要我浅显一点理解,文件规格为:(结构体的数目N+结构体数据1+.....+结构体数据N)

#3


推荐使用WinHex软件查看文件或内存中的原始字节内容。

为什么要有数据结构这个东东?
因为要将现实世界或者抽象理论中的各种数据保存在计算机外存(光盘、硬盘、U盘……)或内存(ROM、RAM、SRAM……)里面的二进制字节数组中。
然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。

#4


谢谢以上各位 我看的不仔细 事先arrABC.size()现在文件里了 第一个read(&n...)就是读这个size 感谢各位。

#1


n能不能读出二进制文件中的ABC结构数目,那要看这个文件当初write的时候是不是先写了一个数目信息啊。如果当初文件不是这么写的,那你这样读肯定是不对的。反过来说,程序既然这样读,那说明那个文件的格式应该就是这样的。

#2


你肯定是不知道写入文件的规格吧,要我浅显一点理解,文件规格为:(结构体的数目N+结构体数据1+.....+结构体数据N)

#3


推荐使用WinHex软件查看文件或内存中的原始字节内容。

为什么要有数据结构这个东东?
因为要将现实世界或者抽象理论中的各种数据保存在计算机外存(光盘、硬盘、U盘……)或内存(ROM、RAM、SRAM……)里面的二进制字节数组中。
然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。

#4


谢谢以上各位 我看的不仔细 事先arrABC.size()现在文件里了 第一个read(&n...)就是读这个size 感谢各位。