Conversion de little-endian à big-endian et inversement
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 :
Code:
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 &) |
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.
À bientôt.
Le Farfadet Spatial