portable signed/unsigned byte cast,C++
I a开发者_开发知识库m using signed to unsigned byte(int8_t) cast to pack byts.
uint32_t(uint8_t(byte)) << n
This works using GCC on Intel Linux. Is that portable for other platforms/compilers, for example PowerPC? is there a better way to do it? using bitset is not possible in my case. I am using stdint via boost
It's not portable, as the types uint32_t and uint8_t are not part of the C++ Standard. All such maipulations are inherently implementation dependent.
If you are using boost/cstdint.hpp
from the Boost Integer library, then yes, the typedefs are portable (cross-platform.) The boost/cstdint.hpp
header is meant to implement C99 stdint.h functionality in C++.
From the Boost documentation:
The header provides the typedef's useful for writing portable code that requires certain integer widths. All typedef's are in namespace boost.
In practice, yes it's most likely going to work on most other platforms you encounter (especially if Boost is ported to it). However, if you are writing these packed values to files or network sockets, you'll have to deal with byte order (your example of PowerPC has big-endian byte order while Intel have little-endian). In that respect, the code will behave differently on different hardware architectures.
精彩评论