fprintf stdout 没有 100% 准确转储数据

fprintf stdout isn't dumping data 100% accurate

本文关键字:转储 数据 100% stdout 没有 fprintf      更新时间:2023-10-16

>我一直在使用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宽度在这里没有帮助,它只是控制填充(。如果没有零终止符,它将打印更多,可能会引发崩溃。