fprintf stdout不会将数据倾倒100%准确

时间:2017-07-23 03:28:53

标签: c++ visual-c++ stdout

我一直在使用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);

1 个答案:

答案 0 :(得分:3)

您应该使用SELECT id FROM tablea WHERE flag = "N" ORDER BY id LIMIT 510045,200; 来编写二进制数据,您可以通过这种方式控制字节数:fwrite

在您的示例中,fwrite(pData, 1, lBytesWritten, stdout);停止在第一个零终止符处打印数据(fprintf宽度在此处没有帮助,它只是控制填充)。如果没有零终结器,它将打印更多,可能导致崩溃。