在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++ 中快速有效地输出位集的方法吗?
我的程序是单线程的,很简单,所以我不介意在其中放置不安全的性能代码,性能现在是代码中的一个大问题。
感谢您的帮助。
问题是 cin
和 cout
试图与库的 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();
我正在编写一个输出二进制的程序,我得到了很多我想输出到终端的程序,但这需要时间。 在我的程序中我想快速输出字符串的其他地方我使用
_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++ 中快速有效地输出位集的方法吗? 我的程序是单线程的,很简单,所以我不介意在其中放置不安全的性能代码,性能现在是代码中的一个大问题。
感谢您的帮助。
问题是 cin
和 cout
试图与库的 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();