Ist std :: bitset bit-order portabel?

8

Sagt C ++ etwas zur Bit-Sortierung? Ich arbeite vor allem an Protokoll-Paket-Layouts, und ich zweifle, ob es eine übertragbare Möglichkeit gibt, eine bestimmte Zahl in Bits 5,6,7 zu ​​schreiben, wobei Bit 5 das "wichtigste" ist.

Meine Fragen:

  • ist 0x01 immer als ein Byte mit Bit 7 gesetzt dargestellt?
  • ist bitset<8>().set(7).to_ulong() immer gleich 1?
xtofl 25.10.2011, 13:24
quelle

3 Antworten

11

Ab 20.5 / 3 (ISO / IEC 14882: 2011)

  

Beim Konvertieren zwischen einem Objekt   des Klassenbitsatzes und eines Wertes eines ganzzahligen Typs entspricht die Bitposition pos dem Bitwert 1 & lt; & lt; pos.

Das heißt, bitset<8>().set(7).to_ulong() ist garantiert (1 << 7) == 128 .

    
hamstergene 25.10.2011, 13:38
quelle
2

Bitset führt keine Serialisierung durch, Sie müssen es also nicht (müssen). Verwenden Sie Serialisierung / Deserialisierung.

  

ist bitset & lt; 8 & gt; (). set (7) .to_ulong () immer gleich 1

Nein, nicht auf meinem Computer (siehe unten).

Ich erwarte jedoch, dass sich die Iostream-Operatoren portabel verhalten:

%Vor%

Druckt

%Vor%     
sehe 25.10.2011 13:28
quelle
2

Wenn die Frage ist, ob Sie die Endianz der Plattform beim Senden binärer Objekte über das Netzwerk gerne ignorieren, ist die Antwort, dass Sie nicht können. Wenn die Frage ist, ob derselbe Code, der auf zwei verschiedenen Plattformen kompiliert wurde, die gleichen Ergebnisse liefert, lautet die Antwort ja.

    
quelle

Tags und Links