可移植的有符号/无符号字节转换,C ++

时间:2009-12-07 19:49:34

标签: c++ casting portability unsigned signed

我使用signed to unsigned byte(int8_t)强制转换为包含字节。

uint32_t(uint8_t(byte)) << n

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

使用stdint

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

来自Boost documentation

  

标题   提供了typedef的用途   编写需要的可移植代码   某些整数宽度。所有typedef都是   在名称空间提升。

答案 2 :(得分:1)

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