访问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){}};
这里是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 ).
例如,现在我想访问第二行的第3个号码,我只需要:
(myaddr+1)->high
然而,结果确实有线:
e.g 1.50656e-189, or sometimes 825303072 for (myaddr+2)->volume
事实上,如果我转换为超出char的任何时间,就会出现这样的错误......
问题:如何使用myaddr->访问映射数据?没有错误?
由于
答案 0 :(得分:0)
这看起来像一个文本文件。如果您将其作为内存映射区域读取,则会获得文本,而不是双倍。那是你的问题。