我有一个文件,其中包含一些用二进制编写的双精度数(准确地说是 9,对于 3x3 矩阵)。我正在尝试将它们用作它们所代表的真正双精度值(数字 ej:5.66 / -1.882 / 等等)。
它们一个接一个地放在文件中,没有任何空格: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::cout 检查值时,我在控制台中打印了一些奇怪的数字:
-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;
}