【发布时间】:2014-11-26 19:36:30
【问题描述】:
我在阅读 wav 标头时做错了什么?
前 8 个字节是:52 49 46 46 94 e5 37 03(第一个 4 个字节是字符,后 4 个字节是 int32 little endian)
QFile wavFile(fileName);
QByteArray wavFileContent = wavFile.readAll();
qDebug() << "The size of the WAV file is: " << wavFileContent.size();
char *fileType = new char[4];
unsigned int fileSize;
QDataStream analyzeHeaderDS(&wavFileContent,QIODevice::ReadOnly);
analyzeHeaderDS.setByteOrder(QDataStream::LittleEndian);
analyzeHeaderDS.readRawData(fileType,4); // "RIFF"
analyzeHeaderDS >> fileSize; // File Size
qDebug() << "WAV File Header read:";
qDebug() << "File Type: " << QString::fromUtf8(fileType);
qDebug() << "File Size: " << fileSize;
输出是:
The size of the WAV file is: 53994908
WAV File Header read:
File Type: "RIFFH??i?5"
File Size: 53994900
为什么它不仅是“RIFF”,还有其他一些东西?我分配了一个 4 字节的字符并读入 4 个字符。下一个值(文件大小)是正确的。
【问题讨论】:
-
FWIW 堆分配 4 个字节似乎毫无意义。分配一个恒定大小的数组。这样你就不需要释放内存。因此,请避免您的代码目前似乎遭受的泄漏。