ポータブル署名/符号なしバイトキャスト、C ++
-
16-09-2019 - |
質問
私は符号なしバイト(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ののあなたの例では、ビッグエンディアンバイトオーダーを持っている)に対処する必要があります。その点では、コードは、異なるハードウェアアーキテクチャ上で異なる動作をします。
所属していません StackOverflow