Pregunta

Estoy usando la conversión de bytes firmados a no firmados (int8_t) para empaquetar bytes.

uint32_t(uint8_t(byte)) << n

Esto funciona usando GCC en Intel Linux.¿Es eso portátil para otras plataformas/compiladores, por ejemplo PowerPC?¿Hay una mejor manera de hacerlo?Usar bitset no es posible en mi caso.Estoy usando stdint vía boost

¿Fue útil?

Solución

Si está utilizando boost/cstdint.hpp de la biblioteca Boost entero, entonces sí, los typedefs son portátiles (multiplataforma). La cabecera boost/cstdint.hpp está destinado a implementar la funcionalidad stdint.h C99 en C ++.

Desde el documentación Boost :

  

La cabecera   proporciona útil del typedef para   la escritura de código portátil que no requiere   ciertos anchos enteros. Todos los de typedef   están en alza espacio de nombres.

Otros consejos

No es portátil, como los tipos uint32_t y uint8_t no son parte del estándar de C ++. Todas estas son maipulations aplicación intrínsecamente dependiente.

En la práctica, sí, lo más probable es que funcione en la mayoría de las otras plataformas que encuentre (especialmente si Boost está adaptado a ella).Sin embargo, si escribe estos valores empaquetados en archivos o sockets de red, tendrá que lidiar con el orden de los bytes (su ejemplo de PowerPC tiene un orden de bytes big-endian mientras que Intel tiene un orden little-endian).En ese sentido, el código se comportará de manera diferente en diferentes arquitecturas de hardware.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top