有unsigned long long
如何以hex
掩码的形式将其打印到std::string
?
我尝试迭代二进制(0001
,0010
,0100
等值掩码:
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
的所有可能的唯一位掩码?
答案 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());
}
}
答案 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;
}