В последнее время я пытаюсь использовать двоичный синтаксический анализатор boost :: spirit :: qi для анализа некоторых двоичных данных в зависимости от порядка следования Платформы. Вот простой пример, подобный следующему:
Использование объявлений и переменных:
using boost::spirit::qi::little_word;
using boost::spirit::qi::little_dword;
using boost::spirit::qi::little_qword;
<strong>boost::uint16_t us;
boost::uint32_t ui;
boost::uint64_t ul;</strong>
Основное использование двоичных парсеров с прямым порядком байтов:
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
, какой тип данных следует использовать? И, пожалуйста, скажите мне, где Boost определить выше эти типы?