Question

J'utilise signé à l'octet non signé (de int8_t) Caste pack byts.

uint32_t(uint8_t(byte)) << n

Cela fonctionne en utilisant GCC sur Intel Linux. Est-ce portable pour d'autres plates-formes / compilateurs, par exemple PowerPC? est-il une meilleure façon de le faire? à l'aide bitset n'est pas possible dans mon cas. J'utilise stdint via boost

Était-ce utile?

La solution

Si vous utilisez boost/cstdint.hpp de la bibliothèque Boost entier, alors oui, les typedefs sont portables (multi-plateforme.) L'en-tête boost/cstdint.hpp vise à mettre en œuvre la fonctionnalité de C99 stdint.h en C ++.

De la documentation Boost :

  

L'en-tête   fournit des informations utiles pour ceux du typedef   l'écriture de code portable qui EXIGE   certaines largeurs entières. Tous les typedef pour   sont en augmentation d'espace de noms.

Autres conseils

Il est pas portable, comme les types uint32_t et uint8_t ne font pas partie de la norme C ++. Tous ces maipulations sont intrinsèquement mise en œuvre dépend.

Dans la pratique, oui, il est plus probable d'aller travailler sur la plupart des autres plates-formes que vous rencontrez (surtout si Boost est porté à lui). Toutefois, si vous écrivez ces valeurs emballés dans des fichiers ou des sockets réseau, vous devrez faire face à l'ordre des octets (votre exemple de PowerPC a l'ordre des octets big-endian alors que Intel ont peu endian). À cet égard, le code se comportera différemment sur différentes architectures matérielles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top