什么头文件是boost库定义自己的原始数据类型的位置?

T.T*_*T.T 2 c++ endianness boost-spirit-qi

最近,我尝试使用boost :: spirit :: qi二进制字节序解析器来解析一些二进制数据取决于平台的字节顺序.有一个简单的例子,如下所示:

使用声明和变量:

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;

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));
Run Code Online (Sandbox Code Playgroud)

它工作得很好.但我的问题来了,为什么我们需要使用一些数据类型,例如boost::uint16_t,boost::uint32_t在这里?我可以使用unsigned longunsigned int在这里?如果我想解析doublefloat数据类型,我应该使用什么样的boost数据类型?请告诉我boost在哪里定义以上这些类型?

Edw*_*nge 6

存在类似uint16_t或uint32_t的类型,以便您可以声明变量具有特定的位宽.您不能使用普通类型(如"long")执行此操作,因为它们在不同的体系结构和/或实现上具有不同的大小.上述类型通常通过预处理器计算得到,从而导致typedef到实现/体系结构特定类型以获得特定大小.