【发布时间】:2011-06-28 11:20:52
【问题描述】:
我有一个包含 double 类型数字的二进制文件。
示例输入文件可在此处获得:www.bobdanani.net/download/A.0.0
我想阅读文件并打印其中的数字。
这就是我所做的:
char* buffer;
int length;
string filename = "A.0.0";
ifs.open (filename.c_str(), ios::in | ios::binary);
// get length of file:
ifs.seekg (0, ios::end);
length = ifs.tellg();
ifs.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
ifs.read (buffer,length);
ifs.close();
cout.write (buffer,length);
cout << buffer << endl;
delete[] buffer;
我也尝试在打印数字时使用类型转换来加倍,但我得到了奇怪的字符。做这个的最好方式是什么?我需要这个二进制文件的数据作为并行程序函数的输入。但这超出了这个问题的范围。
【问题讨论】:
-
也许你需要在使用之前初始化缓冲区,就像这样:memset(buffer, 0, length)
-
如果不知道文件中双精度的格式,就不可能回答这个问题。 “二进制”不是一种格式;二进制双精度可以有许多不同的格式。
-
另外,binary 文件不太可能通过 text 字符(例如空格/制表符)来分隔值。为什么还要分开?
-
嘿,抱歉,我已更正问题并发布包含示例输入文件的链接。抱歉,我可能对制表符分隔格式有误。只是当我在 bash 上使用 ( od - e 文件名 ) shell 命令打印值时,它会以制表符分隔格式打印值。
标签: c++ binaryfiles ifstream readfile