用std::cout格式化二进制文字

format binary literals with std::cout

本文关键字:二进制 文字 格式化 cout std      更新时间:2023-10-16

以下代码将数字的二进制输出写入控制台,如下所示:

00100000

#include <bitset>
using std::bitset;
#include <iostream>
using std::cout;
using std::endl;
int main()
{
    typedef const unsigned char byte;
    byte a = 0b00'000'000; // 0
    byte b = 0b00'000'001; // 1
    byte c = 0b00'000'010; // 2
    byte d = 0b00'000'100; // 4
    byte e = 0b00'001'000; // 8
    byte f = 0b00'010'000; // 16
    byte g = 0b00'100'000; // 32
    byte h = 0b01'000'000; // 64
    byte i = 0b10'000'000; // 128
    bitset<8> x = a | 1 << 5;
    cout << x << endl;
}

我希望输出是这样的:

00'100'000

有没有一种简单的方法可以实现这一点?

这里有一个解决方案:

template<size_t I>
std::ostream& operator << (std::ostream& os, const bitset<I>& b)
{
    int i;
    int check = b.size()-b.size()%3;
    for(i=b.size()-1; i >= check; --i)
        os << b[i];
    if(i>0)
        os << char(39);
    for(; i>=0; --i)
    {
        os << b[i];
        if(i%3 == 0 && i!=0)
            os << char(39);
    }
    return os;
}

使用类似的东西:

std::ostream& operator<<(std::ostream & stream, std::bitset<8> bitset)
{
    auto output_string = bitset.to_string();
    // here you format output_string as you want
    return stream << output_string;
}