Domanda

Sto usando firmato a unsigned byte(int8_t) cast pack bit.

uint32_t(uint8_t(byte)) << n

Questo funziona con GCC su Intel Linux.È che il portatile anche per altre piattaforme/compilatori, per esempio PowerPC?c'è un modo migliore per farlo?utilizzando bitset non è possibile nel mio caso.Sto usando stdint via boost

È stato utile?

Soluzione

Se si sta utilizzando boost/cstdint.hpp dalla Spinta Intero libreria, quindi sì, il typedef sono portatili (cross-platform.) Il boost/cstdint.hpp intestazione è destinata a implementare C99 stdint.h funzionalità in C++.

Dal Boost documentazione:

L'intestazione fornisce il typedef utile per scrivere codice portabile che richiede certo integer larghezze.Tutti typedef s sono nello spazio dei nomi boost.

Altri suggerimenti

Non è portatile, come i tipi uint32_t e uint8_t non fanno parte dello Standard C++.Tutti questi maipulations sono intrinsecamente implementazione dipendente.

In pratica, sì, è più probabile che andando a lavorare sulla maggior parte delle altre piattaforme che si incontrano (soprattutto se la Spinta è portato a farlo).Tuttavia, se si sta scrivendo queste imballato valori per i file o le prese di rete, avrete a che fare con l'ordine dei byte (il tuo esempio di PowerPC è big-endian byte order, mentre Intel hanno little-endian).In proposito, il codice si comportano in modo diverso su diverse architetture hardware.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top