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 : 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 &)
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