Frage

Ich verwende in unsigned Byte unterzeichnet (int8_t) gegossen Byts zu packen.

uint32_t(uint8_t(byte)) << n

Das funktioniert mit GCC auf Intel Linux. Ist das tragbare für andere Plattformen / Compilern, zum Beispiel PowerPC? Gibt es einen besseren Weg, es zu tun? bitset ist nicht möglich in meinem Fall. Ich verwende stdint über boost

War es hilfreich?

Lösung

Wenn Sie boost/cstdint.hpp von der Boost-Integer-Bibliothek verwenden, dann ja, sind die typedefs portable (Cross-Plattform). Der boost/cstdint.hpp Header gemeint C99 stdint.h Funktionalität in C ++ zu implementieren.

Von der Boost-Dokumentation :

  

Der Header   Die stellt die typedef nützlich für   Schreiben portablen Code das erfordert   bestimmte ganzzahlige Breiten. Alle typedef des   im Namensraum boost ist.

Andere Tipps

Es ist nicht tragbar, da die Typen uint32_t und uint8_t sind nicht Teil der C ++ Standards. Alle derartige maipulations sind von Natur aus der Umsetzung abhängig.

In der Praxis ja es ist höchstwahrscheinlich auf den meisten anderen Plattformen zur Arbeit zu gehen auftreten (vor allem, wenn Boost es portiert). wenn Sie diese gepackten Werte in Dateien oder Netzwerk-Sockets jedoch schreiben, werden Sie mit Byte-Reihenfolge (Ihr Beispiel für PowerPC hat Big-Endian-Byte-Reihenfolge während Intel haben Little-Endian) zu tun haben. In dieser Hinsicht wird der Code anders verhalten auf verschiedene Hardware-Architekturen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top