结构似乎是解析二进制数据块(即文件或网络数据包)的有用方法。在blob中有可变大小的数组之前,这很好,很花哨。例如:解构结构中的变量大小数组
struct nodeheader{
int flags;
int data_size;
char data[];
};
这让我找到了最后一个数据字符:
nodeheader b;
cout << b.data[b.data_size-1];
问题是,我想有多个变长数组:
struct nodeheader{
int friend_size;
int data_size;
char data[];
char friend[];
};
我不是手动分配这些结构。我有一个文件,像这样:
char file_data[1024];
nodeheader* node = &(file_data[10]);
正如我试图解析二进制文件(更具体的一个类文件)。我已经用Java编写了一个实现(这是我的课程任务),不,我正在用C++编写个人版本,并且希望不必编写100行代码即可离开。有任何想法吗?
感谢, 斯特凡
一个伟大的一点,我的理解,我想我的问题仍然是: 有没有一个很好的方法来做到这一点?这里有大量的二进制文件,编写数百行代码只是头文件的一个实现,这是一件很痛苦的事情。 – 2008-10-07 15:15:16
实际上,由于结构体具有填充,所以如果您告诉编译器不使用填充,则只能使用它来解析打包的二进制数据。在GCC中,你可以通过__attribute __((packed))来做到这一点;只需在Google上搜索即可。 – Mecki 2008-10-07 15:38:28