gpt4 book ai didi

c++ - 将 double 从文本文件转换为二进制文件

转载 作者:行者123 更新时间:2023-11-30 04:21:18 26 4
gpt4 key购买 nike

我有一个充满数字的文本文件(来自分子动力学输出,应该是 double 类型)分为三列和数千行,如下所示:

    -11.979920  -13.987064   -0.608777
-9.174895 -13.979109 -0.809622

我想读取文件中的所有数字,将它们转换为 double 类型,然后将它们保存到 binary 文件中。我知道不推荐使用二进制文件,但我希望它能够测试两种文件格式(即文本和二进制)的压缩算法。我尝试过使用 Need to convert txt file into binary file in C++,但我不确定是否以其完整格式转换每个数字:-11.275804 或者它是否正在解析每个单独的数字:-1、1、2、7、5 等。

编辑:一直在尝试将单个 double 转换为二进制并返回,但存在一些问题。这是核心代码

    if( std::string(argv[1]) == "-2bin")  //convert to binary
{
cout << "Performing the conversion: Text -> Binary..." << endl;
std::ifstream in(argv[2]);
std::ofstream out(argv[3], std::ios::binary);
double d;

while(in >> d) {
cout << "read a double: "<< d <<endl;
out.write((char*)&d, sizeof d);
}
out.flush();
out.close();

cout << "Conversion complete!" << endl;
return 0;
}else if( std::string(argv[1]) == "-2text" ) //convert to text
{
cout << "Performing the conversion: Binary -> Text..." << endl;
std::ifstream in(argv[2], std::ios::binary);
std::ofstream out(argv[3]);
std::string s;

while(in >> s) {
cout << "read a string:" << s <<endl;
out.write((char*)&s, s.length());
}
out.flush();
out.close();

cout << "Conversion complete!" << endl;
return 0;

当只读取一个 double 时,例如 1.23456789 读取的字符串长度刚好为 7

read a double: 1.23457

我希望它一直读到下一个“空格”,然后转换为 double->bin。在进行二进制 -> 文本转换时,一切都被破坏了,我不知道如何处理二进制并将其转换为 double ,然后再转换为字符串。

更新:最后我设法检查二进制转换是否正在使用 od -lF 实用程序,但每一行都有一条奇怪的行,我不知道它是什么意思,它切断了从第一个数字开始为零,输出出现在两列而不是 3 列中:

od -lF composite_of10_2.bin | more
0000000 -4600438323394026364 -4599308401772716498
-11.97992 -13.987064
0000020 -4619713441568795935 -4602017412087121980
-0.608777 -9.174895
0000040 -4599312880039595965 -4617904390634477481
-13.979109 -0.809622

这看起来是否正确转换?我应该如何执行从二进制到 double 字符串的转换?

最佳答案

在您的二进制 -> 文本转换中,您将数据作为“字符串”读取,而您的二进制文件包含二进制“ double ”

std::string s;

while(in >> s) { ...

这将给出未定义的结果,您需要读入“double”并将值转换为字符串,这将由文本输出流本地处理

double d;
while( in.read( (char*)&d, sizeof(d) ) { //, Read the double value form the binary stream
out << d << ' '; //< Write the double value to the output stream which is in text format
}

关于c++ - 将 double 从文本文件转换为二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14568304/

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