最近、私はboost :: spirit :: qiバイナリエンディアンパーサーを使用して、プラットフォームのエンディアンに依存するいくつかのバイナリデータを解析しようとしています。次のような簡単な例があります。
宣言と変数の使用:
boost :: spirit :: qi::little_wordを使用する; boost :: spirit :: qi::little_dwordを使用する; 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_t
しかし、私の質問が来ます、なぜboost::uint32_t
ここでのようないくつかのデータ型を使用する必要があるのですか?ここで使用できますunsigned long
かunsigned int
?また、解析double
またはfloat
データ型を使用する場合、どのブーストデータ型を使用する必要がありますか?そして、ブーストが上記のタイプを定義する場所を教えてください。