如何从c ++中的stringstream变量中提取二进制数据?

时间:2012-06-18 02:37:48

标签: c++

我是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();

所以,我认为我遗失了一些东西,或者很多,有人可以帮助我吗?

1 个答案:

答案 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