【问题标题】:error when access data from boost mapped_region从 boost mapped_region 访问数据时出错
【发布时间】:2014-02-13 10:22:16
【问题描述】:

我在访问 mapped_region 数据时遇到了一些麻烦。

首先,我定义了一个结构:(用于股票报价...)

struct bar{
double open,high,low,close;
size_t volume;
bar(double _open, double _high, double _low, double _close): open(_open),high(_high), close(_close), volume(_volume){}};

这是我想通过 bar 类型迭代访问的 sample.txt(我也尝试过二进制格式)文件

89.26    89.47    89.25    89.47      563 
89.47    89.56    89.27    89.47      284 
89.46    89.56    89.26    89.33      264 

使用以下代码,我可以逐个字符地读取:

file_mapping m_file(filename,read_only); 
mapped_region region(m_file,read_only);
char const* add= static_cast<char*> (region.get_address());

也就是说,对于第一个数据,我会得到 8 9 。 2 6、逐个字符使用add[i]。这可能是可怕的工作量。 所以我想转换:

bar* myaddr=(bar*)(region.get_address()), where bar is define as the above..

这样我就可以通过使用来访问数据:

myaddr->open (with an offset ). 

比如现在我想访问第二行的第三个数字,我只需要:

 (myaddr+1)->high

但是,结果确实是连贯的:

 e.g 1.50656e-189, or sometimes 825303072 for (myaddr+2)->volume

事实上,如果我转换到 char 以外的任何时间,就会出现这样的错误...

问题:如何使用myaddr->访问映射数据而不报错?

谢谢

【问题讨论】:

    标签: boost out-of-memory file-mapping


    【解决方案1】:

    这看起来像一个文本文件。如果您将其作为内存映射区域读取,则会得到文本,而不是双精度。那是你的问题。

    【讨论】:

    • 所以从文本文件映射不对?你建议什么格式,我试过.mat。 .bin 这些都不起作用
    • @user3217264:你了解包含 PI 值的 double 和文本字符串“3.1415”之间的区别吗?如果没有,我无法帮助你。
    猜你喜欢
    • 2012-12-03
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2012-08-21
    相关资源
    最近更新 更多