Convertir les types intégrés en vecteur

Ma classe TcpClient accepte le vector dans sa méthode SendData comme ceci:

 void CTcpClient::SendData(const vector& dataToTransmit) 

Par conséquent, pour utiliser la fonction, je dois convertir tout type intégré (int, long, court, long long) en un vector .

J’ai essayé plusieurs solutions en utilisant des stream, mais je finis toujours par obtenir une représentation ASCII du nombre que je veux convertir (j’ai également essayé d’utiliser les indicateurs binarys sans succès). Mais j’ai besoin des valeurs binarys des nombres.

Par exemple:

 int num = 0x01234567 vector whatIWant = {0x01, 0x23, 0x45, 0x67} 

Quelle solution suggéreriez-vous?

Merci pour toute aide!

Ignorer l’endianesse:

 template< typename T > char* begin_binary(const T& obj) {return reinterpret_cast(&obj);} template< typename T > char* end_binary (const T& obj) {return begin_binary(obj)+sizeof(obj);} int num = 0x01234567; vector whatIWant( begin_binary(num), end_binary(num) ); 

Cependant, j’utiliserais un caractère unsigned char comme type d’octet.

Je ressens le besoin d’append à cela que, comme toujours, l’utilisation de reinterpret_cast rend le résultat de cette implémentation spécifique. Je pense que l’on pourrait imaginer (à peine) une implémentation dans laquelle char aurait un alignement plus ssortingct que certains types utilisés pour T et que reinterpret_cast déclencherait une exception matérielle. Cependant, je considère cette possibilité plutôt académique.

En outre, les deux fonctions bénéficieraient probablement d’une assertion au moment de la compilation restreignant T Généralement, les pointeurs, les struct contenant des pointeurs et les types non-POD ne doivent pas être utilisés avec cela.

Tout d’abord, n’envoyez jamais d’ int et d’autres types plus grands que char car vous ignorerez l’endianisme et le destinataire risque de ne pas être en mesure d’interpréter correctement les données.

Deuxièmement, vous pouvez surcharger la méthode pour accepter les types intégrés et utiliser des fonctions telles que htons() inside pour convertir les données en ordre de couche réseau de manière indépendante de la machine.

Si vous voulez toujours utiliser vector – utilisez quelque chose comme ceci:

 vector temp( sizeof( yourVariable ) ); memcpy( &temp[0], &yourVariable, sizeof( yourVariable ) );