バイトをパックするためにキャストされたsignedtounsigned byte(int8_t)を使用しています。
uint32_t(uint8_t(byte)) << n
これは、IntelLinuxでGCCを使用して機能します。PowerPCなどの他のプラットフォーム/コンパイラに移植可能ですか?それを行うためのより良い方法はありますか?私の場合、ビットセットを使用することはできません。ブースト経由でstdintを使用しています
バイトをパックするためにキャストされたsignedtounsigned byte(int8_t)を使用しています。
uint32_t(uint8_t(byte)) << n
これは、IntelLinuxでGCCを使用して機能します。PowerPCなどの他のプラットフォーム/コンパイラに移植可能ですか?それを行うためのより良い方法はありますか?私の場合、ビットセットを使用することはできません。ブースト経由でstdintを使用しています
タイプuint32_tおよびuint8_tはC++標準の一部ではないため、移植性はありません。このような操作はすべて、本質的に実装に依存します。
Boost Integerライブラリから使用している場合はboost/cstdint.hpp
、はい、typedefは移植可能です(クロスプラットフォーム)。boost/cstdint.hpp
ヘッダーは、C++でC99stdint.h機能を実装することを目的としています。
Boostのドキュメントから:
ヘッダーは、特定の整数幅を必要とするポータブルコードを作成するのに役立つtypedefを提供します。すべてのtypedefは名前空間ブーストにあります。
実際には、はい、それはあなたが遭遇する他のほとんどのプラットフォームで動作する可能性が最も高いです(特にBoostがそれに移植されている場合)。ただし、これらのパックされた値をファイルまたはネットワークソケットに書き込む場合は、バイトオーダーを処理する必要があります(PowerPCの例ではビッグエンディアンのバイトオーダーですが、Intelではリトルエンディアンです)。その点で、コードは異なるハードウェアアーキテクチャで異なる動作をします。