gpt4 book ai didi

C++读取包含 double 类型数字的二进制文件

转载 作者:行者123 更新时间:2023-11-28 01:05:18 25 4
gpt4 key购买 nike

我有一个二进制文件,其中包含 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;

我也曾尝试在打印数字时使用类型转换来加倍,但我得到了奇怪的字符。做这个的最好方式是什么?我需要这个二进制文件的数据作为并行程序函数的输入。但这超出了这个问题的范围。

最佳答案

虽然我可能是错的,因为你说数字是由制表符/空格分隔的,但我愿意这实际上是 ASCII 数据,而不是原始二进制数据。因此,处理浮点值的最佳方法是在 ifstream 对象上使用 operator>>,然后将其插入 double。这会将输入值自动转换为 double 值,而您所做的只是复制组成浮点值的字符字节,而不是它们本身不是浮点值。另外,如果你试图像字符串一样输出你的缓冲区,你没有明确地以 null 终止它,所以它将继续读取堆栈直到它遇到一个 null 终止符或者你由于访问内存而出现段错误操作系统不允许您访问堆栈的顶部。但无论哪种方式,最终,您的缓冲区都不会代表 double 数据类型。

所以你会有这样的东西:

double my_double_val;

ifs.open (filename.c_str());

if (ifs)
{
ifs >> my_double_val;
}
else
{
cerr << "Error opening file" << endl;
}

ifs.close();

cout << "Double floating point value: " << my_double_val << endl;

关于C++读取包含 double 类型数字的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6505606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com