如何打印所有可能的无符号长长的独特位掩码?

时间:2013-03-19 11:09:52

标签: c++ string hex string-formatting stringstream

unsigned long long如何以hex掩码的形式将其打印到std::string

我尝试迭代二进制(000100100100等值掩码:

std::stringstream str;
std::string result;
for (unsigned long long mask = 1; mask != 0; mask <<= 1) {
    str << mask;
    str >> result;
    std::cout << result << std::endl;
    str.flush();
}

但我只看到了值== 1(请参阅live sample here)。

所以我想知道如何打印unsigned long long的所有可能的唯一位掩码?

4 个答案:

答案 0 :(得分:1)

您需要使用str.clear(),而不是str.flush()。有关十六进制部分的信息,请参阅this

答案 1 :(得分:1)

  

unsigned long long如何以hex掩码的形式将其打印到std::string

您需要使用std::hex来打印十六进制数字,并注意要重用stringstream对象,您实际需要使用str()方法清除其内容,并清除调用clear()

错误状态标志
#include <iostream>
#include <sstream>

int main()
{
    std::stringstream str;
    std::string result;
    for (unsigned long long mask = 1; mask != 0; mask <<= 1)
    {
        // retrieve the string:
        str << std::hex << mask;
        str >> result;
        std::cout << result << std::endl;

        // clear the stringstream:
        str.clear();
        str.str(std::string());
    }
}

How to reuse an ostringstream?:)

答案 2 :(得分:0)

无符号长long的每个值都是唯一的。 所以迭代它,看看这个问题 Is there a printf converter to print in binary format?

<强> [编辑] 啊,我看到你只想要一位设置值。好的,不要迭代,转移它。

答案 3 :(得分:0)

您已经在迭代这些蒙版,只是将它们转换为字符串有问题:

std::string result;
for (unsigned long long mask = 1; mask != 0; mask <<= 1)
{

    std::stringstream ss;
    ss << std::hex << mask;
    result = ss.str();

    std::cout << result << std::endl;
}