fwrite在一台计算机上浮动,在另一台计算机中浮动
fwrite floats on one computer to be fread on another
我有一个程序,它使用以下内容将浮点值写入文件,最终将在用户的计算机上读取。
// 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);
这两台计算机上的程序不一样,但它们是用相同的编译器和设置编译的(我不认为会有其他结果)。如果两个程序都是针对平台编译的,那么在所有典型的台式计算机上,浮点值会被解释为预期的吗?或者第二台计算机可能会以不同的方式解释字节吗?
这两台电脑上的程序不一样,但它们是使用相同的编译器和设置编译(我没想到会这样否则进行计算)。浮动是否会被解释为预期在所有典型的台式电脑中,或者可能是第二台计算机会以不同的方式解释字节吗?
几乎所有的现代台式计算机都使用IEEE 754浮点格式作为单精度浮点数,所以你应该没事。
一个潜在的美中不足之处是端序性:如果你在一台具有大端序CPU的计算机上写出文件,然后在一台带有小端序CPU(反之亦然)的计算机上读取,那么读取的计算机将无法正确解释文件的值。在过去几年里,这不是一个大问题,因为现在几乎所有常用的CPU都是小端序,但以前这个问题很常见,例如,当数据从基于英特尔的计算机传输到基于PowerPC的计算机时,或者反之亦然。处理这个问题的一种常见方法是为文件中的值指定一个标准/规范的端序(无论是哪一个),如果保存/加载文件的计算机与文件格式指定的规范端序不匹配,请确保在保存(或加载)文件时对值进行字节交换。
这可能是一个重复的问题。。。
肯定有可能对格式进行不同的解释。
然而,你说的是"典型的台式电脑",通常意味着x86、x64,也许是ARM。但所有这些都使用小端二进制格式。所以在实践中你可能还可以。
一切都取决于编译器。但为了避免出现问题,您可以检查平台的float
的一些功能。例如,检查std::numeric_limits<float>::digits
,如果为24,则表示编译器对float
使用IEEE标准双精度。
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- 另一台电脑上的Visual Studio C++项目无法生成
- Homebrew OS X OpenCV - 在另一台Mac上运行时寻找dylib
- 当我在支持 avx2 的机器上编译并在另一台仅支持 avx 的机器上运行二进制文件时会发生什么?
- 如何在另一台未安装 Visual Studio 的计算机中使用由 Visual Studio 生成的 dll
- 在另一台计算机中运行 GTKMM 代码时未定义的符号
- 将Visual Studio C 构建的中间文件移至另一台计算机
- 为什么我的Glreadpixels程序在另一台计算机中不起作用
- 在另一台计算机MFC C++上不进入while循环
- 我可以将TokenPrivileges数组从一台计算机复制到另一台计算机吗
- 从另一台计算机运行opencv可执行文件
- 通过网络直接从另一台计算机的内存中读取文件
- fwrite在一台计算机上浮动,在另一台计算机中浮动
- 在C++中使用 zeromq 将序列化的 Mat 对象发送到另一台计算机
- 一台计算机中出现 msvs 2013 错误 C2057,另一台计算机中没有错误。这是怎么回事?
- 使用蓝牙将陀螺仪数据传输到另一台计算机
- 使用脉冲编码调制从一台计算机到另一台计算机的数据传输
- 如何在另一台计算机(linux)上使用OpenCV运行c++库
- 在局域网上选择一台计算机作为服务器