portatile signed/unsigned byte cast,C++
-
16-09-2019 - |
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
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.