在不同类型的流之间复制数据

Copy data between streams of different type

本文关键字:之间 复制 数据 同类型      更新时间:2023-10-16

如何有效地将数据从一个流插入到另一个不同类型的流中?

我尝试过以下几种:

#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;
}

首先,正如本问题中所指出的,如果不编写大量自定义模板专门化,就无法用unsigned short等类型实例化basic_string和流。

第二,这条线

cs << uss.rdbuf();

不会做你认为会做的事。取basic_streambufbasic_ostreamoperator<<

basic_ostream<charT,traits>& operator<< (basic_streambuf<char_type,traits>* sb);

其中CCD_ 6是用于CCD_。换句话说,字符类型必须匹配。

在您的情况下,它们不匹配,所以您最终调用operator<<(const void *),并打印出地址。当我在coliru上测试它时,它打印出了字符0x7830