C/C++ 一次读取二进制文件(浮点数)

Posted

技术标签:

【中文标题】C/C++ 一次读取二进制文件(浮点数)【英文标题】:C/C++ read binary files (flaot numbers) at one time 【发布时间】:2021-04-16 00:32:32 【问题描述】:

我想知道有没有办法在 C 或 C++ 中加快 fread?例如,如果我想读取一个包含 100 个 4 字节浮点数的二进制文件。我愿意:

float *data=(float*)calloc(sizeof(float), 100);
float datatmp=0.0;
f=fopen("datafilename","rb");
for(int i=0;i<100;i++)
   fread(&datatmp,4,1,f);
   data[i]=datatm;

flcose(f);

我的问题是:我可以一次读取所有 100 个浮点数并将它们放入数据数组中吗?这会比使用循环更快吗?

谢谢。

【问题讨论】:

好吧,你告诉我们?如果您尝试两种方式并对其进行计时,您测量了哪些差异(如果有)? 这会比使用循环更快吗?很可能不会。您是否在编译器中启用了优化?为什么你认为读取 100 个浮点数是任何类型的瓶颈? "我可以一次读取所有 100 个浮点数并将它们放入数据数组吗?" -- 我想这取决于您的编程技能。你能写代码来做到这一点吗?或者,您可以编写一些代码来一次(直接)将所有 100 个浮点数读取到数据数组中吗? (后一个选项的更简单的代码可能比任何性能变化都更重要。) 【参考方案1】:

您可以一次阅读所有内容。 fread(data,sizeof(float)*100,1,f);

【讨论】:

以上是关于C/C++ 一次读取二进制文件(浮点数)的主要内容,如果未能解决你的问题,请参考以下文章

labview如何读取txt中的一系列浮点数,并转为二进制输出到端口?

python3教程:控制Python浮点数输出位数

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

Python如何将浮点数作为十六进制转换为十进制

大型机 S370 十六进制浮点数到十进制的转换

浮点数的比较