我已经有了一些文件,其中有一些双精度(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