使用C ++,Windows 7,Intel CPU。
我想做的是将浮点值[-1,1]映射到16位带符号的值,并将其写入文件。最显而易见的事情似乎是将float值乘以32768(2 ^ 16/2),然后简单地将它们写入。当我这样做时会发生以下情况:
std::ofstream outfile(filename.c_str());
float hypotheticalFloat = 0.25;
int16_t scaledVal = hypotheticalFloat*32768;
outfile << scaledVal;
八进制转储命令然后告诉我
$ od -cd output.pcm
0000000 8 1 9 2
12600 12857
在我看来,它好像将每个int16_t值的数字都写为自己的字节一样。我将感谢任何知道这里发生了什么的人。我很茫然。
最佳答案
这是由于两个错误:首先是当您打开没有指定openmode的文件时,该文件以文本模式打开,并且您希望它是二进制的:
std::ofstream outfile(filename.c_str(), std::ios::out | std::ios::binary);
另一个错误是您使用文本输出运算符
<<
。您需要write
数据:outfile.write(reinterpret_cast<const char*>(&scaledVal), sizeof scaledVal);