質問

私は符号なしバイト(int8_t)に署名した使用していますbytsパックにキャストします。

uint32_t(uint8_t(byte)) << n

このは、Intel Linux上でGCCを使用して動作します。他のプラットフォーム/コンパイラのためにそのポータブルは、たとえばPowerPC用、ですか? それを行うには良い方法はありますか?ビットセットを使用すると、私の場合は不可能です。 私はブーストを経由してstdintを使用しています。

役に立ちましたか?

解決

あなたはブースト整数ライブラリからboost/cstdint.hppを使用している場合は、

、[はい、のtypedefは(クロスプラットフォーム。)ポータブルでboost/cstdint.hppヘッダはC ++でのC99 stdint.h機能を実装するためのものです。

ブーストドキュメントに:

  

ヘッダ   typedefの便利を提供   必要と移植性の高いコードを書きます   特定の整数幅。すべてのtypedefさん   名前空間boostにあります。

他のヒント

これは、C ++標準の一部ではないのuint32_tとuint8_t種類として、ポータブルではありません。すべてのそのようmaipulationsは本質的に、実装依存しています。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top