2

バイトをパックするためにキャストされたsignedtounsigned byte(int8_t)を使用しています。

uint32_t(uint8_t(byte)) << n

これは、IntelLinuxでGCCを使用して機能します。PowerPCなどの他のプラットフォーム/コンパイラに移植可能ですか?それを行うためのより良い方法はありますか?私の場合、ビットセットを使用することはできません。ブースト経由でstdintを使用しています

4

3 に答える 3

3

タイプuint32_tおよびuint8_tはC++標準の一部ではないため、移植性はありません。このような操作はすべて、本質的に実装に依存します。

于 2009-12-07T19:52:34.803 に答える
2

Boost Integerライブラリから使用している場合はboost/cstdint.hpp、はい、typedefは移植可能です(クロスプラットフォーム)。boost/cstdint.hppヘッダーは、C++でC99stdint.h機能を実装することを目的としています。

Boostのドキュメントから:

ヘッダーは、特定の整数幅を必要とするポータブルコードを作成するのに役立つtypedefを提供します。すべてのtypedefは名前空間ブーストにあります。

于 2009-12-07T20:15:32.127 に答える
1

実際には、はい、それはあなたが遭遇する他のほとんどのプラットフォームで動作する可能性が最も高いです(特にBoostがそれに移植されている場合)。ただし、これらのパックされた値をファイルまたはネットワークソケットに書き込む場合は、バイトオーダーを処理する必要があります(PowerPCの例ではビッグエンディアンのバイトオーダーですが、Intelではリトルエンディアンです)。その点で、コードは異なるハードウェアアーキテクチャで異なる動作をします。

于 2009-12-07T20:17:06.423 に答える