4

我有一个数组double

QVector<double> Y(count);

我需要将其打包以QByteArray通过以太网发送。

所以我做到了。这并不难:

QByteArray line;
line.clear();
line.append(QByteArray::fromRawData(reinterpret_cast<const char*>(Y.data()),
count*sizeof(double)));

我尝试使用此代码从以下位置解压缩数据QByteArray recv

QVector<double> data((line.size())/sizeof(double));
QByteArray dou(sizeof(double),0x0);
for(int i = 0; i<data.count(); i++){
    dou = recv.mid(i*sizeof(double),sizeof(double));
    data[i] = *reinterpret_cast<const double*>(dou.data());
    dou.clear();
}

但我不喜欢它。我想找到一种优雅的解压方式,QByteArrayQVector<double> 能帮我吗?

4

2 回答 2

7

您可以使用 a以特定格式QDataStream对二进制数据进行编码。(更具体地说,首先是项目数(int32),然后是每个项目)

QVector流操作符有重载

QByteArray line;
QDataStream stream(&line, QIODevice::WriteOnly);
stream << y;

并阅读:

QVector<double> data;
QDataStream stream(line);
stream >> data;
于 2014-03-18T13:07:52.237 回答
0

通常的做法是将数据序列化为文本。这将使您的服务器和客户端可移植。通过网络发送二进制数据不是一个好主意。您可以创建自己的文本协议,或使用现有的协议(如 Google Protocol Buffers)。

于 2014-03-18T12:57:01.633 回答