我一直在使用IAudioCaptureClient从我的音频输出设备收集数据,并使用可以正常工作的mmioWrite将其记录到文件中,但是我也想将此数据转储到stdout,以便能够流式传输它。我使用的是fprintf,但输出数据与写入的文件并不完全相同,即使它们是来自同一缓冲区,两个文件似乎也有98%相同。

以下是相关代码:

BYTE *pData;
...
// Here pData is bufferized with data from my output device
pAudioCaptureClient->GetBuffer(&pData, &nNumFramesToRead, &dwFlags, NULL, NULL);
...
LONG lBytesWritten = mmioWrite(hFile, reinterpret_cast<PCHAR>(pData), lBytesToWrite);

fprintf(stdout, "%.*s", lBytesWritten, pData);
...
// I've also tried

// HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

// WriteConsole(hStdOut, reinterpret_cast<PCHAR>(pData), lBytesWritten, NULL, NULL);

最佳答案

您应该使用fwrite写入二进制数据,可以通过以下方式控制字节数:fwrite(pData, 1, lBytesWritten, stdout);

在您的示例中,fprintf停止在第一个零终止符字符处打印数据(lBytesWritten宽度在这里无济于事,它仅用于控制填充)。如果没有零终止符,它将打印更多内容,从而可能导致崩溃。

关于c++ - fprintf stdout不能正确转储数据100%,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45261227/

10-13 07:36