我使用signed to unsigned byte(int8_t)强制转换为包含字节。
uint32_t(uint8_t(byte)) << n
这适用于在Intel Linux上使用GCC。这对于其他平台/编译器来说是否可移植,例如PowerPC? 有更好的方法吗?在我的情况下,使用bitset是不可能的。 我通过boost
使用stdint答案 0 :(得分:3)
它不可移植,因为类型uint32_t和uint8_t不是C ++标准的一部分。所有这些操作本身都依赖于实现。
答案 1 :(得分:2)
如果您正在使用Boost Integer库中的boost/cstdint.hpp
,那么是,typedef是可移植的(跨平台)。boost/cstdint.hpp
标头用于在C ++中实现C99 stdint.h功能。
标题 提供了typedef的用途 编写需要的可移植代码 某些整数宽度。所有typedef都是 在名称空间提升。
答案 2 :(得分:1)
在实践中,是的,它最有可能在您遇到的大多数其他平台上工作(特别是如果将Boost移植到它上面)。但是,如果要将这些打包值写入文件或网络套接字,则必须处理字节顺序(PowerPC的示例具有big-endian字节顺序,而Intel具有little-endian)。在这方面,代码在不同的硬件架构上的行为会有所不同。