結構似乎是解析二進制數據塊(即文件或網絡數據包)的有用方法。在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