yui*_*ick 1 c++ binary fstream
当我通过fstream读取信息时,它在两个不同的程序中发生了两次,即使给定的文件没有改变,给我程序的输入也不稳定.
在我最近的一个关注音频阅读的节目中.我正在对文件中的前四个字母进行简单的检查.这些字母应该是RIFF,它们也是 - 我检查过.
因此,为了检查给定二进制文件的格式,我缓冲前四个字母并查看它们是否等于'RIFF'.
char buffer[4];
std::ifstream in(fn,std::ios::binary);
in.read(buffer,4);
if(buffer!="RIFF"){//Always wrong atm
std::cout << "INVALID WAV FILE: " << buffer << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当我第一次制作这个节目时,我记得这个工作正常.现在,我通过自己的cout得到一个错误:
INVALID WAV FILE: RIFFýfK
Run Code Online (Sandbox Code Playgroud)
有没有人知道出了什么问题?也许是一种让fstream更加一致的方法?
你正在阅读4个字符,但没有添加零终结符,而且你的比较是错误的,因为你没有比较字符串相等性,你应该做:
char buffer[5];
std::ifstream in(fn, std::ios::binary);
in.read(buffer, 4);
buffer[4] = '\0'; // Add a zero-terminator at the end
if (strcmp(buffer,"RIFF")) { // If buffer isn't {'R','I','F','F','\0'}..
std::cout << "INVALID WAV FILE: " << buffer << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35 次 |
| 最近记录: |