Bonjour,
J'ai nouveau problème de détecté: quand j'écris des données en binaire sous windows, je n'arrive pas a les lire sous OSX...
Exemple: Pour écrire un entier dans un fichier fichier, je faisais:
Code :
- // écriture
- std::ofstream ofs("toto.dat" );
- int i = 50;
- ofs.write(reinterpret_cast<const char*>(&i), sizeof(int));
- ofs.close
- // lecture
- std::ifstream ifs("toto.dat" );
- int ri = 0;
- ofs.read(reinterpret_cast<char *>(&ri), sizeof(int));
- ifs.close();
|
Donc tout cela marchait bien sous windows, mais par contre des données écrites sous windows ne sont pas lues correctement sous mac.
Donc j'imagine que c'est un problème dut au fait que un utilise du big endian et l'autre du small endian.
Première question: Il y a-t-il une norme sur l'endianisme (?) quand on écris dans un fichier? Tout dois être en big endian comme pour des données transmises par réseau?
Deuxième question: Du coup, je fais comment moi ? Il y a htons/ntohs, mais je n'écris pas que des entier moi... Et j'imagine que si je planque des float dans des long cela ne va pas marcher... type:
Code :
- float f = 3.6f;
- long *l = reinterpret_cast<long *>(&f);
- long l2network = *l;
|
Car je suis pas sur que le mac et win vont représenter les float de la même façon
[edit] Et puis j'imagine que ça va aussi être le drame à cause de mes sizeof(int) qui peuvent retourner tout et n'importe quoi en fonction de la plateforme
C'est quoi la méthode "propre" pour ce problème?
merci
Message édité par Amonchakai le 26-07-2011 à 08:29:46