c++ - fwrite 在一台计算机上 float ,在另一台计算机上被 fread

标签 c++ file floating-point

我有一个程序使用以下内容将 float 写入文件,最终将在用户的计算机上读取。

// computer A
float buffer[1024];
...
fwrite(reinterpret_cast<void*>(buffer), sizeof(float), 1024, file);

// computer B
float buffer[1024];
fread(reinterpret_cast<void*>(buffer), sizeof(float), 1024, file);

两台计算机上的程序不一样,但它们是使用相同的编译器和设置编译的(否则我不希望这会成功)。考虑到两个程序都针对平台进行编译, float 是否会在所有典型台式计算机上按预期解释,或者第二台计算机是否可能以不同方式解释字节?

最佳答案

The programs on the two computers are not the same, but they are compiled with the same compiler and settings (I wouldn't expect this to work out otherwise). Will the floats be interpreted as expected across all typical desktop computers, or is it possible the second computer will interpret the bytes differently?

几乎所有现代台式电脑都使用 IEEE 754 floating point format对于他们的单精度 float ,所以你应该没问题。

一个潜在的美中不足是字节顺序:如果你在一台有大端 CPU 的计算机上写出文件,然后在一台有小端 CPU 的计算机上读取它(反之亦然),那么读取计算机不会正确解释文件的值。这在过去几年不是什么大问题,因为现在几乎所有常用的 CPU 都是小端,但以前这个问题很常见,例如将数据从基于 Intel 的计算机传输到基于 PowerPC 的计算机时,反之亦然。处理该问题的一种常见方法是为文件中的值指定标准/规范的字节序(无论是哪一个),并确保在保存(或加载)文件时对值进行字节交换如果您保存/加载它们的计算机与您的文件格式指定的规范字节序不匹配。

关于c++ - fwrite 在一台计算机上 float ,在另一台计算机上被 fread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36540022/

相关文章:

c++ - 将打开的窗口实例作为参数传递给第二个窗口

c++ - ios_base::sync_with_stdio(false) 在来自标准输入的两个输入之间不起作用

java - 在 Java 中,如何一次从文件中迭代多个元素?

bash - 如何在 bash 脚本中回显 float ,包括点前的前导 0

c++ - 使用等式比较 float 的情况

c# - 为什么 float.Parse ("123,45") 不抛出异常

c++ - 如果不存在则定义一个类型

c++ - 注册特定文件扩展名的 Windows shell 命名空间文件夹 View 扩展名

php - 如何在PHP的文件中间插入一些文本

database - 无法从 Web 服务器复制 Umbraco.sdf