どのヘッダファイルのブーストライブラリは、独自のプリミティブデータ型を定義しているのですか?

StackOverflow https://stackoverflow.com/questions/2805215

  •  25-09-2019
  •  | 
  •  

質問

最近、私はブーストを使用しよう::精神::気バイナリエンディアンパーサいくつかのバイナリデータを解析するためには、プラットフォームのエンディアンに依存します。簡単な例は次のように、あります:

の宣言と変数を使用します:

using boost::spirit::qi::little_word;
using boost::spirit::qi::little_dword;
using boost::spirit::qi::little_qword;

boost::uint16_t us;
boost::uint32_t ui;
boost::uint64_t ul;

リトルエンディアンバイナリパーサの基本的な使用方法:

test_parser_attr("\x01\x02", little_word, us); assert(us == 0x0201);
test_parser_attr("\x01\x02\x03\x04", little_dword, ui); assert(ui == 0x04030201);
test_parser_attr("\x01\x02\x03\x04\x05\x06\x07\x08", little_qword, ul);
assert(ul == 0x0807060504030201LL);

test_parser("\x01\x02", little_word(0x0201));
test_parser("\x01\x02\x03\x04", little_dword(0x04030201));
test_parser("\x01\x02\x03\x04\x05\x06\x07\x08",
    little_qword(0x0807060504030201LL));

これは非常にうまく機能します。しかし、私の質問は、なぜ我々はここboost::uint16_tboost::uint32_tのようないくつかのデータ型を使用する必要がない、来ますか?私はここでunsigned longまたはunsigned intを使用することはできますか? 私はdoubleまたはfloatデータ型を解析したい場合や、どのようなブーストデータタイプIは、使用する必要がありますか?ブーストは、これらのタイプの上に定義されていると私に教えてください?

役に立ちましたか?

解決

uint16_tかのuint32_tが存在のようなタイプは、特定のビット幅を有するように変数を宣言することができるように。彼らは異なるアーキテクチャおよび/または実装上のサイズが異なるので、あなたは「長い間」のような通常のタイプでこれを行うことはできません。前述上述のタイプは、通常、特定のサイズを取得するために実装/建築特定のタイプに型定義をもたらすプリプロセッサ計算を通してによって導出される。

他のヒント

は、ファイル<boost/cstdint.hpp>boost::(u)int(8|16|32|64)_t定義がすべて含まれています。 MSVCは<cstdint>同梱されていませんので、これは主に提供されます。また、(gccのような)Cコンパイラ<boost/cstdint.hpp>だけで輸入されているC ++コンパイラでは、ブースト名前空間に<cstdint>ます。

も参照してください。 stdint.hする

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