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 :
pour lire 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; }
Tout ça fonctionne à merveille et je pense d'ailleurs que c'est un procédé classique.
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); }
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 !
Partager