왜 wav 헤더를 잘못 읽었습니까?4 바이트 문자로 읽기
처음 8 바이트는 52 49 46 46 94 (E5) 37 03 (첫 번째 4 바이트 문자로 의미 마지막 4 바이트는 리틀 엔디안을이 int32된다)
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 문자를 읽습니다. 다음 값 (파일 크기)이 정확합니다.
4 바이트를 할당하는 FWIW 힙은 무의미한 것처럼 보입니다. 일정한 크기의 배열을 할당하십시오. 그렇게하면 메모리를 확보 할 필요가 없습니다. 따라서 코드가 현재 손상된 것으로 보이는 누출을 피하십시오. –