dissortingbution portable d’octets signés / non signés, C ++

J’emploie signé pour octet non signé (int8_t) cast pour emballer byts

uint32_t(uint8_t(byte)) << n 

Cela fonctionne avec GCC sur Intel Linux. Est-ce portable pour d’autres plateformes / compilateurs, par exemple PowerPC? y a-t-il une meilleure façon de le faire? L’utilisation de bitset n’est pas possible dans mon cas. J’utilise stdint via boost

Si vous utilisez boost/cstdint.hpp de la bibliothèque Boost Integer, alors, les typedefs sont portables (multiplate-forme.) L’en boost/cstdint.hpp tête boost/cstdint.hpp est censé implémenter la fonctionnalité stdint.h de C99 en C ++.

De la documentation Boost :

L’en-tête fournit la typedef utile pour l’écriture de code portable nécessitant certaines largeurs entières. Tous les typedef sont en boost de l’espace de noms.

Ce n’est pas portable, car les types uint32_t et uint8_t ne font pas partie de la norme C ++. Toutes ces modifications dépendent insortingnsèquement de la mise en œuvre.

En pratique, oui, il est fort probable que cela fonctionnera sur la plupart des autres plates-formes que vous rencontrerez (surtout si Boost y est porté). Toutefois, si vous écrivez ces valeurs condensées dans des fichiers ou des sockets réseau, vous devrez gérer l’ordre des octets (votre exemple de PowerPC utilise l’ordre des octets big-endian alors que celui d’Intel est little-endian). À cet égard, le code se comportera différemment selon les architectures matérielles.