gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:48:03 28 4
gpt4 key购买 nike

最近,我尝试使用 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;

Basic usage of the little endian binary parsers:

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 longunsigned int 吗?如果我想解析 doublefloat 数据类型,我应该使用什么 boost 数据类型?请告诉我 boost 在哪里定义以上这些类型?

最佳答案

存在像 uint16_t 或 uint32_t 这样的类型,因此您可以声明一个具有特定位宽的变量。您不能使用像“long”这样的普通类型来执行此操作,因为它们在不同的体系结构和/或实现上具有不同的大小。前面提到的类型通常是通过预处理器计算派生的,结果是实现/架构特定类型的 typedef 以获得该特定大小。

关于c++ - boost库定义自己的原始数据类型的头文件是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2805215/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com