使用 ifstream 从二进制文件中读取 4 个字节

Posted

技术标签:

【中文标题】使用 ifstream 从二进制文件中读取 4 个字节【英文标题】:Read 4 bytes a time with ifstream from binary file 【发布时间】:2021-06-05 23:18:00 【问题描述】:

我有一个包含浮点数的二进制文件,因此每 4 个字节都是一个浮点数。 我不确定如何以每四个字节存储为浮点数的方式进行读取,这样我就可以用它做任何我需要的事情。

这是我的代码:

int main()

    float i;
    std::ifstream inFile("bin_file", std::ios::binary);
    while (inFile >> i)
    
        std::cout << i;
    
    inFile.close();
    return 0;

在这种情况下,除非我将 i 定义为字符,否则它甚至不会进入 while 循环。我猜那是因为它每次读取 1 个字节并且不能将其存储为浮点数。 顺便说一句,我已经检查过了,文件打开了。

谢谢!

【问题讨论】:

您需要做的第一件事是确定字节序。 ***.com/questions/701624/…。 std:bit_cast是c++20转换成浮点数的好方法。 查看对Reading binary file to unsigned char array and write it to another [duplicate]的回答,它是重复的问题并没有解决问题(如何使用read()处理二进制输入)。 【参考方案1】:

流中的operator&gt;&gt; 专为格式化数据(即字符串)而设计。您想改用read

int main()

    float i;
    std::ifstream inFile("bin_file", std::ios::binary);
    while(inFile.read(reinterpret_cast<char*>(&i), sizeof(i))) 
        std::cout << i;
    
    inFile.close();
    return 0;

【讨论】:

以上是关于使用 ifstream 从二进制文件中读取 4 个字节的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何将从二进制文件中读取的字节转换为数字

在python中如何从二进制文件中读取信息

Dask 从二进制文件中读取数据

C - 从二进制文件中读取位

用python从二进制文件中读取32位带符号的ieee 754浮点?

使用 c++ 时从二进制文件中读取 int 不正确