c++ - fprintf stdout 没有 100% 准确地转储数据

标签 c++ visual-c++ stdout

我一直在使用 IAudioCaptureClient 从我的音频输出设备收集数据,并使用正在工作的 mmioWrite 将其记录到一个文件中,但我也想将这些数据转储到标准输出,以便我能够流式传输它。我正在使用 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/

相关文章:

c++ - 如何在所有者绘制的 MFC CMenu 派生菜单中显示复选框?

visual-c++ - 编译 x64 代码时, "x86_amd64"和 "amd64"有什么区别?

python - Subprocess.call 和 --stdout

C++ 字符串 char** 翻译

c++ - 不同平台的 QT 应用程序中的类型是否具有相似的大小?

visual-c++ - 即使在项目属性中进行更改后也会出现错误 Please #define _AFXDLL or do not use/MD[d]

node.js - 为什么在热循环中写入标准输出会导致内存不足关闭?

python - 如何将 psycopg2 copy_expert() 输出重定向到变量?

c++ - Windows Mobile 6.5——当对话框空闲时调用函数?一个 WM_KICKIDLE

c++ - 类型名称后的括号是否与 new 有所不同?