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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top