我使用下面的代码从二进制文件中读取结构。
struct A
{
int s;
char cname[20];
};
int main () {
A mystruct;
ifstream is;
is.open ("filename.txt", ios::binary );
is.read ( &mystruct, sizeof(InpumystructtStruct) );
is.close();
return 0;
}
假设二进制文件中有多个结构,类型为struct A,struct B和struct C,文件中出现的大小不同。如果我想按顺序读取所有这些,假设我知道序列,这是正确的吗?
struct A
{
int s;
char cname[20];
};
struct B
{
int s;
};
struct A
{
char cname[20];
};
int main () {
A mystructa;
B mystructb;
C mystructc;
ifstream is;
is.open ("filename.txt", ios::binary );
while( is.good() ) {
// determine struct to use
is.read ( &mystruct/*put right type*/, sizeof(/*put right tupe*/) );
}
is.close();
return 0;
}
答案 0 :(得分:1)
不,那不会起作用。
如果你知道它们是按顺序写在文件中的:
struct {
A a;
B b;
C c;
} v;
is.read (&v, sizeof v);
但是,这有很多问题。其中最重要的是可能存在结构填充,作者使用的int
大小,字符串问题等。
这些问题都通过诸如JSON,XML等通用数据格式来解决。
稍微更便携一点,你所写的这种变化会起作用,但问题与以前一样:
A mystructa;
B mystructb;
C mystructc;
is.read (&mystructa, sizeof mystructa);
is.read (&mystructb, sizeof mystructb);
is.read (&mystructc, sizeof mystructc);