【发布时间】:2015-12-09 18:30:10
【问题描述】:
在 Qt 库中有 QByteArray 和 QDataStream 类,它们允许我以非常易于使用的语法读取和写入变量到内存缓冲区:
QByteArray data = getData();
QDataStream stream( data );
double d = 0;
int i = 0;
stream >> d >> i;
如何仅使用 stl 流类实现类似的行为? 例如,我有一个 const char* 数据和它的大小,所以我想构造 std::istream 并从该数据中读取变量:
const char* data = getData();
size_t size = getSize();
membuffer buf( data, data + size );
std::istream str( buf );
double d = 0;
str >> d;
注意不要复制数据!
【问题讨论】:
-
std::xstream类具有QTextStream的功能,不QDataStream。 C++ 标准库中没有类似于QDataStream的内容。一般来说,std::istream对您的目的毫无用处。重新实现QDataStream是not hard at all。 -
纠正无效假设后,这可能与this question 重复。
-
@KubaOber:鉴于请求是使用标准流执行类似的操作,那么您指出的问题(甚至更重要的是答案)显然是不是的答案。 ..
-
@DietmarKühl 标准流是大多数
QTextStream的替代品。如果您想要的只是二进制序列化,那么它们没有意义,而QDataStream进行二进制序列化。这个问题是基于一个无效的假设。仅仅因为QDataStream和std::istream在他们的名字中包含“stream”,并不能让一个替代另一个。