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

标签 c++ iostream

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

我尝试过以下方法:

#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_ostreamoperator<<这需要 basic_streambuf

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

哪里char_typecharT 的 typedef 。换句话说,字符类型必须匹配。

就您而言,它们不匹配,因此您最终会调用 operator<<(const void *)相反,只需打印出地址即可。当我在 coliru 上测试这个时,它打印出 7830相反,对于字符 0x .

关于c++ - 在不同类型的流之间复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597013/

相关文章:

c++ - 访问 COM 接口(interface)方法 C++

c++ - 在 C++ 的命名空间中键入

c++ - 如何找出键盘的地址

c++ - 如何同步访问 NAS 上文件的两个进程?

c++ - 带有模板的奇怪解析行为 _Atomic

c++ - 起始地址无限循环

c++ - 了解文件流标志/位

c++ - 有效使用C++ iomanip库

c++ - std::iostream 读取或写入计数为零且缓冲区无效

java - 从 C++ 中 java 的 writeInt 方法写入的文件中读取一个 int?