我是C ++的新手,我通常使用C.但是现在,我只是找到一个压缩一些信息的好库,使用一种特殊的算法对我的项目非常有用。然后这个库给了我一个答案:二进制数据,它存在于一个stringstream对象中。由于它是二进制数据,因此有些字节不是ASCII字符。所以我想要做的是提取数据并获得十六进制表示。我怎么能这样做? 我有以下代码:
stringstream ss; \\variable in which I got the result from the library
bitset1.write(ss); \\with this instruction I got the binary information from the library
从那里我尝试以下事项:
1)只需打印:
cout << hex << ss;
2)使用str方法。
cout << hex << ss.str();
3)使用读缓冲区方法。
cout << hex << ss.rdbuf();
所以,我认为我遗失了一些东西,或者很多,有人可以帮助我吗?
答案 0 :(得分:1)
如果存在快捷方式,我不知道。但是,这可以满足您的需求:
std::cout << std::hex << std::setfill('0');
const std::string s = ss.str();
const size_t slen = s.length();
for (size_t i = 0; i < slen; ++i) {
const unsigned char c = s[i];
const unsigned int n = c;
std::cout << std::setw(2) << n;
}
std::cout << "\n";
关键是使用非char
整数类型进行输出,因为流插入运算符<<
专门处理char
。