c – 提升精神是否适合这种情况?

c – 提升精神是否适合这种情况?,第1张

概述我有一种情况,我试图从一组名称 – 值对中建立一个HDF复合类型(为简单起见,我们会说一个值可以是双字符串或字符串).为了清楚起见,数字数据已经是二进制的 – 它不是一个字符串.这些名称提供了结构信息(这是数组的一部分吗?,这是嵌套复合类型的一部分吗?). 我正在想象制作一个标记向量,使用名称信息来插入标记(例如'[‘和’]’来分隔数组,'{‘和’}’来分隔嵌套的化合物),但是否则使用这些值.我从 我有一种情况,我试图从一组名称 – 值对中建立一个HDF复合类型(为简单起见,我们会说一个值可以是双字符串或字符串).为了清楚起见,数字数据已经是二进制的 – 它不是一个字符串.这些名称提供了结构信息(这是数组的一部分吗?,这是嵌套复合类型的一部分吗?).

我正在想象制作一个标记向量,使用名称信息来插入标记(例如'[‘和’]’来分隔数组,'{‘和’}’来分隔嵌套的化合物),但是否则使用这些值.我从文档中不清楚Spirit二元解析器是否是处理数值的合适选择.

解决方法 我无法判断“其余”(即非二进制数据)是否适合使用PEG解析器生成器.

但是,只是为了给你一些开始:

使用

> qi :: bin_float,qi :: little_bin_float或qi :: big_bin_float
> qi :: bin_double,qi :: little_bin_double或qi :: big_bin_double

这是一个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          # compiledd if=/dev/urandom count=32 bs=1 2>/dev/null > input.dat # generate input./a.out                                               # spirit demoecho 'And `od` output:'                        od -w8 -A none -t f8 -v /tmp/input.dat                  # compare to `od`

免责声明这只是为了帮助您了解Spirit如何处理二进制输入.

总结

以上是内存溢出为你收集整理的c – 提升精神是否适合这种情况?全部内容,希望文章能够帮你解决c – 提升精神是否适合这种情况?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1226971.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存