2

我正在使用有符号到无符号字节(int8_t)强制转换来打包字节。

uint32_t(uint8_t(byte)) << n

这适用于英特尔 Linux 上的 GCC。这对于其他平台/编译器是否可移植,例如 PowerPC?有更好的方法吗?在我的情况下,使用 bitset 是不可能的。我正在通过 boost 使用 stdint

4

3 回答 3

3

它不可移植,因为类型 uint32_t 和 uint8_t 不是 C++ 标准的一部分。所有这些操作本质上都是依赖于实现的。

于 2009-12-07T19:52:34.803 回答
2

如果您使用boost/cstdint.hpp的是 Boost Integer 库,那么是的,typedef 是可移植的(跨平台)。boost/cstdint.hpp头文件旨在在 C++ 中实现 C99 stdint.h 功能。

来自Boost 文档

标头提供 typedef 对于编写需要特定整数宽度的可移植代码很有用。所有 typedef 都在命名空间提升中。

于 2009-12-07T20:15:32.127 回答
1

实际上,是的,它最有可能在您遇到的大多数其他平台上工作(特别是如果将 Boost 移植到它)。但是,如果您将这些打包值写入文件或网络套接字,则必须处理字节顺序(您的 PowerPC 示例具有大端字节序,而英特尔具有小端字节序)。在这方面,代码在不同的硬件架构上会表现不同。

于 2009-12-07T20:17:06.423 回答