便携式符号/无符号字节投,C ++(portable signed/unsigned byte ca

2019-09-30 06:14发布

我使用的符号到无符号字节(中int8_t)投收拾byts。

uint32_t(uint8_t(byte)) << n

这适用于使用英特尔的Linux GCC。 是便携其他平台/编译器中,例如PowerPC的? 有没有更好的办法做到这一点? 使用的bitset是不可能在我的情况。 我通过升压用stdint

Answer 1:

如果您正在使用boost/cstdint.hpp来自Boost整数库,那么,该类型定义是可移植的(跨平台)的boost/cstdint.hpp头是指用C来实现C99 stdint.h功能++。

从Boost文档 :

报头提供的的typedef的有用用于写入要求一定整数宽度的可移植代码。 所有的typedef的是在名字空间boost。



Answer 2:

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



Answer 3:

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



文章来源: portable signed/unsigned byte cast,C++