Salut,

j'suis actuellement sur un projet de client/serveur en C/C++ et je dois donc communiquer des informations entre mon serveur et mon client.

Pour se faire je n'ai pas voulu envoyer des commandes textes au serveur car je trouve pas ça très agréable à manipuler. Je préfère directement inscrire les données comme elles sont. Je tiens à préciser que j'écrit ces données en big endian.
Pour faire ça j'ai donc fait deux classe, DataInput et DataOutput. Leur structure est assez simple, j'ai pour chaque type une méthode qui écrit dans un buffer la donnée, et une méthode qui lit cette donnée depuis le buffer.
Par exemple :

pour écrire un int :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
void                                    DataOutput::writeInt(int i)
{
  _buf += (i >> 24);
  _buf += (i >> 16) & 0xff;
  _buf += (i >> 8) & 0xff;
  _buf += i & 0xff;
}
pour lire un int :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
int                             DataInput::readInt()
{
  int                           ret;
 
  ret = _buf[_pos] << 24;
  ret |= ((_buf[_pos + 1] & 0xff) << 16);
  ret |= ((_buf[_pos + 2] & 0xff) << 8);
  ret |= _buf[_pos + 3] & 0xff;
  _pos += 4;
  return (ret);
}
Tout ça fonctionne à merveille et je pense d'ailleurs que c'est un procédé classique.
Mais je me heurte à un problème. Je ne sais pas comment écrire un double ou encore un float. Est ce que vous auriez une idée de comment faire ceci ?
Merci beaucoup !