在不同类型的数据流之间复制数据
问题描述:
如何有效地将数据从一个数据流插入另一个不同类型的数据流?在不同类型的数据流之间复制数据
我曾尝试以下:
#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
。
http://stackoverflow.com/questions/5497284/is-it-ok-to-use-iostreams-with-int-as-character-type – 2014-08-31 23:45:15
'cs 2014-08-31 23:54:33