c++ - 输出类似于 FORTRAN 的未格式化 C++

标签 c++ fortran output ofstream

我希望将一些 FORTRAN 代码转换为 C++。 我在未格式化的输出方面遇到了一些问题。

在 FORTRAN 中我有一些代码如下

program main
integer*4 :: one
one = 1
open(unit = temp, file = "temp.dat", status = 'replace', form='unformatted')
WRITE(temp) one, one
end

这段代码的输出结果是

0x0800 0000 0100 0000 0100 0000 0800 0000 
0x0a

所以对我来说,输出似乎有点奇怪。我一直在玩弄它,我认为 0x08 是用于正在写入的变量的大小,两个 0x00000001 是用于正在写入的两个四字节变量,0x00000008 可能是一个关闭大小的缓冲区(我不知道为什么当起始缓冲区是单个字节时这将是 4 个字节)。 0x00000a 似乎是一个 EOF 字符。

当我尝试用 C++ 模拟输出时,我这样做了

int main(){
    long one = 1;
    std::ofstream outFile;
    outFile.open("temp.dat", std::ofstream::out)
    outFile << one << one;
    outFile.close()
}

这没有用,因为它试图写出 1 的字符串而不是二进制,所以我尝试了:

int main(){
    long one = 1;
    std::ofstream outFile;
    outFile.open("temp.dat", std::ofstream::out) 
    outFile.write((char*) one, sizeof(one));  //Line a
    outFile.write((char*) one, sizeof(one));
    outFile.close()
}

希望通过将其转换为字符,直接输出二进制文件。 不幸的是,这在 a 线上有一个 SigSev 故障。我不太清楚为什么。

这样的方法是好的方法,还是我应该尝试朝不同的方向发展?

最佳答案

所以从 chtz 窃取,我找到了一种匹配两个输出的方法。我不知道这是否是最有效的。

int main(){
    int one = 1;
    int sizeOf = 2*sizeof(one);
    std::ofstream outFile;
    outFile.open("temp.dat", std::ofstream::out) 
    outFile.write(reinterpret_cast<const char*>(&sizeOf),sizeof(sizeOf)); 
    outFile.write(reinterpret_cast<const char*>(&one),sizeof(one));
    outFile.write(reinterpret_cast<const char*>(&one),sizeof(one));
    outFile.write(reinterpret_cast<const char*>(&sizeOf),sizeof(sizeOf));  

    outFile.close()
}

关于c++ - 输出类似于 FORTRAN 的未格式化 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49923179/

相关文章:

用于稀疏矩阵的 Fortran 90/95 库?

c - 输出不符合预期

c++ - Qt - 没有使用正确的源文件

c++ - 使用顶点着色器确定线方向

c++ - 您可以动态生成初始化列表吗?

python - 不完整的 gamma 函数 : can this code get any faster in cython, C 或 Fortran?

excel - 如何将 Fortran 输出写入 CSV 文件?

Java输出错误

c++ - .cpp 数字输出格式

c++ - 如何在 OpenCV 中裁剪圆圈(通过 Hough 变换找到)​​?