在c++中快速打印出bitset

Print out bitset quickly in c++

我正在编写一个输出二进制的程序,我得到了很多我想输出到终端的程序,但这需要时间。 在我的程序中我想快速输出字符串的其他地方我使用

_putchar_nolock

对于浮点数和十进制数,我使用

printf

目前我的代码看起来像这样用于输出二进制数

for (size_t i = 0; i < arraysize; i++)
{
    std::cout << (std::bitset<8>(binarynumbers[i]));
}

输出给出了一个漂亮的 0 和 1,这正是我想要的,没有十六进制。问题是当我 运行 性能基准和测试时,我发现 std::cout 比 _putchar_nolock 和 printf.

慢得多

在网上查找我找不到在位集上使用 printf 并让它输出 0 和 1 的方法。并且 _putchar_nolock 似乎必须进行所有数据转换同样缓慢。

有谁知道在 C++ 中快速有效地输出位集的方法吗? 我的程序是单线程的,很简单,所以我不介意在其中放置不安全的性能代码,性能现在是代码中的一个大问题。

感谢您的帮助。

问题是 cincout 试图与库的 stdio 缓冲区同步。这就是为什么它们通常很慢; 您可以关闭此同步,这将使 cout 通常更快。

std::ios_base::sync_with_stdio(false);//use this line 

您还可以使用 to_string() 函数从位集中获取 std::string。如果需要,您可以使用 printf

我想发表评论没有足够的代表。您可以使用位集 class 的 to_string 成员。这可能应该有效:

std::cout << std::bitset<8>(binarynumbers[i]).to_string();