Salut à tous !
Je me retrouve à lire (en C++) des fichiers non formatés (binaires) séquentiels générés en Fortran, ce qui met à mal le peu de santé mentale qu´il me reste. Au-delà des problèmes de délimiteurs d´enregistrements que je pense avoir réglé, j´ai besoin de faire des conversions depuis petit-boutsien (little-endian) à gros-boutsien (big-endian) et inversement. Voici un code qui semble donner satisfaction :
Néanmoins, je crains qu´elle ne soit pas très sûr dans le cas de valeurs signées. De plus, je ne suis pas certain que ce soit le meilleur moyen d´effectuer cette conversion. Si quelqu´un s´est déjà attelé à ce problème et a des conseils, je suis preneur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 /** * \brief Swap from little or big endian to the other. * \param x Data to be converted. * \todo This function has to be redone in a more secure way. */ template <class T> inline void littleBigEndian (T &x) { // Number of bits for the swap. Infers that a char has 8 bits. const size_t n = sizeof(T) * 4; x = (x << n) | (x >> n); } // void littleBigEndian (T &)
À bientôt.
Le Farfadet Spatial
Partager