如何有效地将数据从一个流插入另一个不同类型的流?
我尝试了以下内容:
#include <iostream>
#include <sstream>
using namespace std;
int main(void)
{
basic_stringstream<unsigned short> uss;
stringstream cs;
unsigned short val = 0xffff;
uss.write(&val, 1); // write value to 'uss'
uss.read(&val, 1); // read data from 'uss' into 'val'
cout << hex << val << endl; // gives 0xffff
cs << uss.rdbuf(); // copy 'uss' contents into 'cs'
cs.read((char*) &val, 2); // read data from 'cs' into 'val'
cout << hex << val << endl; // gives 0x3030 ?
return 0;
}
答案 0 :(得分:2)
首先,如上所述in this question,您无法在不编写大量自定义模板专业化的情况下,使用basic_string
等类型实例化unsigned short
和流。
第二,这一行
cs << uss.rdbuf();
不符合您的想法。需要basic_ostream
的{{1}} operator<<
是
basic_streambuf
其中basic_ostream<charT,traits>& operator<< (basic_streambuf<char_type,traits>* sb);
是char_type
的typedef。换句话说,字符类型必须匹配。
在您的情况下,它们不匹配,因此您最终会调用charT
,而只是打印出地址。当我在coliru上测试时,它会打印出operator<<(const void *)
代替字符7830
。