Also ich würde das einfach so machen: Wenn ich die Struktur des ID Tags kenne (und du musst sie ja kennen, sonst ist alles andere ja sinnlos), dann weiß ich durch sizeof() die Größe der Struktur. Auf 32 Bit Maschinen kann dir folgende Tabelle in C/C++ helfen:
char = 1 Byte
short = 2 Byte
int = 4 Byte
__int32 = 4 Byte (Win32)
long = 4 Byte (Win32)
__int64 = 8 Byte (Win32)
float = 4 Byte
double = 8 Byte
long double = 8 Byte (Win32)
bool = 1 Byte (Win32)
Vorsicht bei statischen Arrays innerhalb von Strukturen! Diese Struktur
Code:
struct s
{
char array[5];
};
ergibt bei sizeof(s) genau 5 Bytes. Dagegen diese:
Code:
struct s
{
char array[5];
int i;
};
schon 12 Bytes. Das kommt durch das Byte Alignment, d.h. ein statisches Array richtet sich in diesem Fall nach dem Bytevermögen des größten Datentyps innerhalb der Struktur, in diesem Fall das int mit 4 Bytes. 5 chars benötigen daher 8 Bytes Speicherplatz plus die 4 Bytes vom int ergibt 12 Bytes. Ein bißchen detaillierter:
int gibt 4 Bytes als größter Datentyp der Struktur vor:
1 bis 4 char Felder benötigen ganze 4 Bytes
5 bis 8 char Felder benötigen 2 * 4 Bytes = 8 Bytes
9 bis 12 char Felder benötigen 3 * 4 Bytes = 12 Bytes
usw.
Wäre der größte Datentyp double (8 Bytes), wäre das Alignment eben 8 Bytes. Byte Alignment ist wichtig beim direkten Lesen und Schreiben von zusammengesetzten Datentypen aus bzw. in binären Dateien.
Soviel kurz dazu.
Also besorge dir mal ne Definition der Struktur des ID Tags, implementiere sie und lasse sizeof() mal drüberfahren. Dann weißt du, wie groß sie ist. Übrigens muß Struktur nicht gleich struct sein, darf auch class bedeuten...