c – 提升精神是否适合这种情况?
发布时间:2020-12-16 07:06:26 所属栏目:百科 来源:网络整理
导读:我有一种情况,我试图从一组名称 – 值对中建立一个HDF复合类型(为简单起见,我们会说一个值可以是双字符串或字符串).为了清楚起见,数字数据已经是二进制的 – 它不是一个字符串.这些名称提供了结构信息(这是数组的一部分吗?,这是嵌套复合类型的一部分吗?).
我有一种情况,我试图从一组名称 – 值对中建立一个HDF复合类型(为简单起见,我们会说一个值可以是双字符串或字符串).为了清楚起见,数字数据已经是二进制的 – 它不是一个字符串.这些名称提供了结构信息(这是数组的一部分吗?,这是嵌套复合类型的一部分吗?).
我正在想象制作一个标记向量,使用名称信息来插入标记(例如'[‘和’]’来分隔数组,'{‘和’}’来分隔嵌套的化合物),但是否则使用这些值.我从文档中不清楚Spirit二元解析器是否是处理数值的合适选择. 解决方法
我无法判断“其余”(即非二进制数据)是否适合使用PEG解析器生成器.
但是,只是为了给你一些开始: 使用 > qi :: bin_float,qi :: little_bin_float或qi :: big_bin_float 这是一个17行示例程序,完全重复了行为 od -w8 -A none -t f8 -v input.dat 在我的盒子上: #include <boost/spirit/include/qi.hpp> #include <fstream> #include <iomanip> namespace qi = boost::spirit::qi; int main() { using namespace std; // read file ifstream ifs("input.dat",ios::binary); string const input { istreambuf_iterator<char>(ifs),{} }; // parse vector<double> result; bool ret = qi::parse(begin(input),end(input),*qi::bin_double,result); // print if (ret) for (auto v : result) cout << setw(28) << setprecision(16) << right << v << "n"; } 见它Live on Coliru 使用的命令: clang++ -Os -std=c++11 -Wall -pedantic main.cpp # compile dd if=/dev/urandom count=32 bs=1 2>/dev/null > input.dat # generate input ./a.out # spirit demo echo 'And `od` output:' od -w8 -A none -t f8 -v /tmp/input.dat # compare to `od` 免责声明这只是为了帮助您了解Spirit如何处理二进制输入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |