我正在使用有符号到无符号字节(int8_t)强制转换来打包字节。
uint32_t(uint8_t(byte)) << n
这适用于英特尔 Linux 上的 GCC。这对于其他平台/编译器是否可移植,例如 PowerPC?有更好的方法吗?在我的情况下,使用 bitset 是不可能的。我正在通过 boost 使用 stdint
我正在使用有符号到无符号字节(int8_t)强制转换来打包字节。
uint32_t(uint8_t(byte)) << n
这适用于英特尔 Linux 上的 GCC。这对于其他平台/编译器是否可移植,例如 PowerPC?有更好的方法吗?在我的情况下,使用 bitset 是不可能的。我正在通过 boost 使用 stdint
它不可移植,因为类型 uint32_t 和 uint8_t 不是 C++ 标准的一部分。所有这些操作本质上都是依赖于实现的。
如果您使用boost/cstdint.hpp
的是 Boost Integer 库,那么是的,typedef 是可移植的(跨平台)。boost/cstdint.hpp
头文件旨在在 C++ 中实现 C99 stdint.h 功能。
来自Boost 文档:
标头提供 typedef 对于编写需要特定整数宽度的可移植代码很有用。所有 typedef 都在命名空间提升中。
实际上,是的,它最有可能在您遇到的大多数其他平台上工作(特别是如果将 Boost 移植到它)。但是,如果您将这些打包值写入文件或网络套接字,则必须处理字节顺序(您的 PowerPC 示例具有大端字节序,而英特尔具有小端字节序)。在这方面,代码在不同的硬件架构上会表现不同。