C++ 保存/加载双(到/从文件)

标签 c++ double mingw standards

[为清楚起见重写。]

我需要在文件中写入和读取double,格式总是具有相同的字符数。格式不需要是人类可读的:它只需要快速加载(使用尽可能少的动态内存和转换内容,文件空间很重要但并不那么重要)。

是否有一种标准(或至少安全可靠)的方法来获取 double 的组件,以便我可以将有效数字符号和尾数符号存储为 '1''0' 以及尾数和尾数分别以十六进制格式固定长度?

本质上,我如何从 double 中获取特定的位/数字组件?是否有可能在不同的系统上执行此操作(假设是相同的操作系统系列,例如 Windows),或者 double 组件的标准是否不是每个操作系统都强制执行的?

我正在使用 MinGW,当然也为 Windows 编译。我想尽可能使用 C 标准库,而不是 C++ 标准库。此外,我想避免使用其他库(如 Boost),但如果有特定的 Windows 函数,那么它们会有很大帮助。

最佳答案

最直接的方法是以二进制模式打开你的 fstream,然后使用 fstream 的 write() 和 read() 方法从流中读取你的 double:

#include <fstream>
#include <iostream>

int main( int argc, char** argv ) {
    std::fstream fp( "foo", std::fstream::in |
                            std::fstream::out |
                            std::fstream::trunc |
                            std::fstream::binary );

    double d1, d2;

    d1 = 3.14;

    fp.write( (char*)&d1, sizeof( d1 ) );
    fp.seekg( 0, std::fstream::beg );
    fp.read( (char*)&d2, sizeof( d2 ) );

    std::cout << "d1 = " << d1 << "  d2 = " << d2 << std::endl;
}

关于C++ 保存/加载双(到/从文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18523426/

相关文章:

c# - 转换 double 0.10 double.parse() 转换为 10.0

java - 我想要一个 E 表示法双变量转到字符串,但是......?

c++ - 当一行中只有一个 `#` 时,C++ 预处理器会做什么 - 没有别的?

c++ - 为什么显式调用析构函数不会破坏我的对象?

java - 双倍增幅

visual-studio-2008 - 在 QtCreator 中使用 OpenCV 2.3 和 Qt

mingw - 尝试将 CPAN 与我的 MINGW 版本一起用于 Git Bash

mingw - 启动外部扫描仪信息生成器时出错 - MingW 上的 gcc 链接问题

c++ - 如何使用 qtest 测试信号槽连接

c++ - Cygwin 下使用 CMake 编译库