【发布时间】:2016-12-29 09:41:01
【问题描述】:
我正在尝试使 matlab 程序适应 C,我的问题出在 fwrite 和 fread 函数中。在 matlab 上我有:
fid = fopen ('sweep_100_3400.pcm','rb');
s = fread (fid, 'int16');
我的疑问是,在 C 中,fread 和 fwrite 函数中还有两个参数。
fread(void*, size_t, size_t, FILE*);
fwrite(const void*, size_t, size_t, FILE*);
在我的 C 代码中:
arq = fopen("C:\\Users\\iago_\\Desktop\\MediaMovel\\sweep_100_3400.pcm", "rb");
fread(x, sizeof(double), itera, arq);
fclose(arq);
x 是保存我的文件数据的向量。sizeof(double) 是数据的长度(我已经声明了所有double)arq 是指针到文件。
第三个参数是size_t,为了适配我的matlab程序,在这个参数中我应该使用媒体长度还是向量大小?
(我正在编码移动平均值,媒体长度由用户通知,向量大小是我输入文件的长度)。
对于fwrite函数,我对参数有同样的疑问。
arq=fopen("C:\\Users\\iago_\\Desktop\\MediaMovel\\saida_medial_movel_c.pcm", "wb");
fwrite(saida, sizeof(double), itera, arq);
fclose(arq);
【问题讨论】:
-
fread的size和count参数相乘后,不得大于接收缓冲区大小。阅读手册页将对您有所帮助。此外,fread的返回值很重要,因为请求的数据量可能不可用。 -
贴出
saida的定义以及itera的值是如何推导出来的,以便更好地提出问题。 -
您的目标尚不清楚,但如果您尝试将您从带有
fread的文件中读取的数据写入带有fwrite的另一个文件,那么fwrite的count参数必须是fread的返回值 - 被读取的大小为size的元素的数量。
标签: c matlab moving-average