我想以奇怪的方式使用 fread 或类似的东西。我不确定是否可能......让我解释一下案例:
我有一个二进制文件,名为“ dummy ”。该文件中包含unsigned char数组。但是,我想把它们放到一个浮点数组中,它将存储4倍的内存空间。
我可以实现以下目标:
FILE* in_file;
int numberOfCharacters = 1000; // number of unsigned characters to read ...
in_file = fopen("dummy", "rb");
float* floatArray = (float*) malloc( numberOfCharacters * sizeof(float) );
for(int i=0;i<numberOfCharacters;i++)
{
unsigned char temp;
fread(&temp, sizeof(unsigned char), 1, in_file);
floatArray[i] = temp;
}
我知道(实际上并没有真正尝试)这种方式可能会奏效。但我很好奇是否有更好(更快)的方式呢?也许,没有循环..?
提前致谢,
Sait的。
答案 0 :(得分:2)
示例似乎没问题(虽然一些错误检查可能会很好)。一种可能的性能改进可能是在循环之前移动fread
并一次读取所有1000个条目(到已分配的char数组中)。但是,由于fread被缓冲,这可能只会稍快一些。
答案 1 :(得分:1)
脱下袖口:
setvbuf
为您的文件设置缓冲模式。mmap
)fstream
(文件流)和迭代器(即语法)在C ++中更容易。此外,如果您需要性能,可以通过覆盖相应的成员来创建自己的优化文件流。次要尼特:
malloc
#include
正确的标题fopen
是否成功,然后在完成后关闭文件floatarray
一旦完成答案 2 :(得分:0)
检查来自fread的返回值是否可以避免额外的循环,并可能用垃圾填充其余的floatArray
您还可以使用
获取文件的大小fseek (in_file, 0, SEEK_END);
size=ftell (in_file);
如果要为float数组分配更少的内存