我已經有了一些文件,其中有一些雙精度(9是準確的,對於3x3矩陣)用二進制編寫的。我試圖利用它們作爲它們所代表的真正的double值(數字ej:5.66/-1.882/etc ..)。.read()reinterpret_cast <char *> C++
它們一個接一個地放在文件中,沒有任何空格:3.245-2.453.253 ......它們正好是9個數字。
然後,我有一個指針指向的9個插槽(0-8),我想,以填補雙打的價值載體的結構,所以,在這裏就是我試圖至今:
struct input{
double data*;
double myvector[9];
};
然後
input test;
test.data = test.myvector;
ifstream f(file,ios::binary);
f.read(reinterpret_cast<char *>(test.data),sizeof(double)*3*3);
後來,當我去一些簡單的std ::法院,檢查值我印入控制檯一些奇怪的數字:
-0.1667被打印爲:-1, 57218e + 26
這是否應該發生?如果不是,我做錯了什麼?如果我正確的做了這件事,我需要做些什麼才能獲得我的「-0.1667」?
謝謝。編輯:當他們創建文件時,他們有一個指針(指向像我的例子一樣的雙打矢量),他們只是做了一個f.write(無論你放在這裏);而當我說數字是一個接一個的時候,這就是我的意思,在那裏的任何一箇中間都沒有黑色字符。
編輯2:全碼:
#include <iostream>
#include <fstream>
using namespace std;
struct input{
double data*;
double myvector[9];
};
int main(int argc, char * argv[]){
input test;
test.data=test.myvector;
ifstream f(argv[1], ios::binay); // argv[1] is the file EJ: ./program myfile
f.read(reinterpret_cast <char *> (test.data), sizeof(double)*9); // being 9 values.
for(int i=0;i<9;i++){
cout << test.data[i] << endl;
}
return 0;
}
你確定該文件是二進制格式嗎? – jrok
程序選擇的字節,而不是通過f.read() – Zasito
@jrok絕對值。他們作爲一個例子來測試f.read()(因爲我還在學習)。 – Zasito