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