在不同类型的流之间复制数据
Copy data between streams of different type
如何有效地将数据从一个流插入到另一个不同类型的流中?
我尝试过以下几种:
#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_streambuf
的basic_ostream
的operator<<
是
basic_ostream<charT,traits>& operator<< (basic_streambuf<char_type,traits>* sb);
其中CCD_ 6是用于CCD_。换句话说,字符类型必须匹配。
在您的情况下,它们不匹配,所以您最终调用operator<<(const void *)
,并打印出地址。当我在coliru上测试它时,它打印出了字符0x
的7830
。
相关文章:
- 复制和交换习惯用法与移动操作之间的交互
- 填充上编译器生成的复制构造函数之间的不一致
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- 移动语义和深层/浅层复制之间有什么关系?
- 高CPU使用率,在API桌面复制中获取帧之间具有不同的超时间隔
- r-在Rcpp和C++之间转换矢量(使用Rcpp::as或Rcpp:::wrap)是否会创建一个新的矢量并复制元素
- 是std::memcpy在不同的可复制类型之间的未定义行为
- char 和 char& 之间是否存在相对复制开销差异?
- C++ 复制字符串的指定索引之间的任何子字符串
- 在结构之间复制字符数据
- 在线程之间复制 std::vector 而不锁定
- 函数参数和临时变量之间复制构造函数的奇怪行为
- 在派生类之间复制共享变量(浅副本就足够了)
- 在结构之间复制特定值
- 不能在两个函数之间复制值
- C++在 ActiveDirectory 和 Sqlite3 之间复制文本数据时出现问题
- 在 sqlite 数据库 qt 之间复制表会导致错误
- 在可能重叠的范围之间复制类
- 在不同类型的流之间复制数据
- 在不同大小的缓冲区之间复制,这些缓冲区按其固定大小进行模板化