最近,我尝试使用 boost::spirit::qi 二进制字节序解析器来解析一些二进制数据,这取决于平台的字节序。有一个简单的例子,如下所示:
使用声明和变量:
使用 boost::spirit::qi::little_word; 使用 boost::spirit::qi::little_dword; 使用 boost::spirit::qi::little_qword; boost::uint16_t 我们; 升压::uint32_t ui; boost::uint64_t ul;
little endian 二进制解析器的基本用法:
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 在哪里定义了上述这些类型?