portátil assinado / sem assinatura byte elenco, C ++
-
16-09-2019 - |
Pergunta
Eu estou usando assinado para unsigned byte (int8_t) lançou para embalar byts.
uint32_t(uint8_t(byte)) << n
Isso funciona usando GCC em Intel Linux. É que portátil para outras plataformas / compiladores, por exemplo PowerPC? Tem algum jeito melhor de fazer isso? usando bitset não é possível no meu caso. Eu estou usando stdint via impulso
Solução
Se você estiver usando boost/cstdint.hpp
do impulso biblioteca Integer, então sim, os typedefs são portáteis (multi-plataforma). O cabeçalho boost/cstdint.hpp
destina-se a implementar a funcionalidade C99 stdint.h em C ++.
A partir da documentação impulso :
O cabeçalho prevê útil do typedef escrever código portátil que exige certas larguras de inteiros. Todos de typedef estão em boost namespace.
Outras dicas
Não é portátil, como os tipos uint32_t e uint8_t não fazem parte do padrão C ++. Todas essas maipulations são inerentemente dependente de implementação.
Na prática, sim, é mais provável vai funcionar na maioria das outras plataformas que você encontrar (especialmente se Impulso é portado para ele). No entanto, se você está escrevendo estes valores embalado para arquivos ou sockets de rede, você vai ter que lidar com ordem de bytes (o seu exemplo de PowerPC tem ordem big-endian byte enquanto a Intel tem little-endian). A esse respeito, o código irá se comportar de forma diferente em diferentes arquiteturas de hardware.