0

访问 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-> 访问映射数据而不会出错?

谢谢

4

1 回答 1

0

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

于 2014-01-23T03:23:49.010 回答