使用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);

08-03 22:06