所以我知道我之前已经问过这个问题,但是,我仍然被困在我可以继续我的项目之前。基本上,我正在尝试读取 .wav 文件,我已经读取了所有必需的标头信息,然后将所有数据存储在 char 数组中。这一切都很好,但是,然后我将数据重新转换为整数并尝试输出数据。
我已经在 MatLab 中测试了数据,但是,我得到了非常不同的结果:
MATLAB -0.0078
C++:1031127695
现在这些是非常错误的结果,这里有人好心地说这是因为我将它作为整数输出,但是,我几乎尝试了每一种数据类型,但仍然得到错误的结果。有人建议它可能与 Endianness (http://en.wikipedia.org/wiki/Endianness) .. 这看起来合乎逻辑吗?
这是代码:
bool Wav::readHeader(ifstream &file)
{
file.read(this->chunkId, 4);
file.read(reinterpret_cast<char*>(&this->chunkSize), 4);
file.read(this->format, 4);
file.read(this->formatId, 4);
file.read(reinterpret_cast<char*>(&this->formatSize), 4);
file.read(reinterpret_cast<char*>(&this->format2), 2);
file.read(reinterpret_cast<char*>(&this->numChannels), 2);
file.read(reinterpret_cast<char*>(&this->sampleRate), 4);
file.read(reinterpret_cast<char*>(&this->byteRate), 4);
file.read(reinterpret_cast<char*>(&this->align), 2);
file.read(reinterpret_cast<char*>(&this->bitsPerSample), 4);
char testing[4] = {0};
int testingSize = 0;
while(file.read(testing, 4) && (testing[0] != 'd' ||
testing[1] != 'a' ||
testing[2] != 't' ||
testing[3] != 'a'))
{
file.read(reinterpret_cast<char*>(&testingSize), 4);
file.seekg(testingSize, std::ios_base::cur);
}
this->dataId[0] = testing[0];
this->dataId[1] = testing[1];
this->dataId[2] = testing[2];
this->dataId[3] = testing[3];
file.read(reinterpret_cast<char*>(&this->dataSize), 4);
this->data = new char[this->dataSize];
file.read(data, this->dataSize);
unsigned int *te;
te = reinterpret_cast<int*>(&this->data);
cout << te[3];
return true;
}
任何帮助将非常感激。我希望我已经提供了足够的细节。
谢谢你。