如何有效地将数据从一个流插入到另一个不同类型的流中?
我尝试过以下方法:
#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;
}
最佳答案
首先,如上所述in this question ,您无法实例化basic_string
s 和类型如 unsigned short
的流无需编写大量自定义模板特化。
第二,这一行
cs << uss.rdbuf();
并没有像你想象的那样做。 basic_ostream
的operator<<
这需要 basic_streambuf
是
basic_ostream<charT,traits>& operator<< (basic_streambuf<char_type,traits>* sb);
哪里char_type
是 charT
的 typedef 。换句话说,字符类型必须匹配。
就您而言,它们不匹配,因此您最终会调用 operator<<(const void *)
相反,只需打印出地址即可。当我在 coliru 上测试这个时,它打印出 7830
相反,对于字符 0x
.
关于c++ - 在不同类型的流之间复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597013/