Concernant la portabilité, on ne peut pas faire ce genre de choses
1 2 3 4 5 6 7 8 9
| // je suppose sint16 un type entier 16 bits signé, etc
struct Table {
sint16 s;
uint32 ll;
char s[42];
};
....
Table t = { 42, 42*42, "toto" };
file.write(reinterpret_cast<char*>(&t), sizeof(t)); |
Ceci est en gros la seule utilité que je pourrais voir dans mon code de tous les jours aux structures évoquées dans ce fil de discussion => à utiliser des tables bourrinement sérialisables dans des fichiers.
Seulement, ce n'est pas portable.
Si je ne me plante pas, ce code compilé sur un intel écrira ceci dans le fichier:
2a 00 e4 06 00 00 7a 6f 7a 6f 00 na wa k' .. ...
Le même code sur une sparc donnera
00 2a 00 00 06 e4 7a 6f 7a 6f 00 na wa k' .. ...
Bref, pour s'en sortir, quand on veut du portable, il faut obligatoirement sérialiser chaque champs individuellement, pour le passer à une moulinette de la famille des nttohs().
=> http://fr.wikipedia.org/wiki/Endianess
PS: J'entends par fichier texte: un fichier humainement décodable et maintenable. Que les champs soient séparées par des points-virgules, des tabulations, ou des balises bien verbeuses. Dans ces fichiers, le nombre 42 est stocké sous sa forme textuelle où chauque chiffre prend un octet, et non sa forme binaire qui tient sur un seul octet.
Partager