2014-01-23 18 views
0

訪問mapped_region數據時遇到一些麻煩。從boost映射區域訪問數據時出錯

首先,我定義了一個結構:(股票報價...)

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 

事實上,如果我轉換爲字符以外的任何時間,就不會有這樣的錯誤......

問:我如何可以通過使用myaddr-訪問映射數據>沒有錯誤?

謝謝

回答

0

看起來像一個文本文件。如果您將其作爲內存映射區域讀取,您將獲得文本,而不是雙倍。那是你的問題。

+0

因此,從文本文件映射是不正確的?你建議的格式是什麼,我試過.mat。 .bin沒有這些工作 – user3217264

+0

@ user3217264:你是否理解包含PI值和文本字符串「3.1415」的「double」之間的區別?如果沒有,我不能幫你。 –