从QByteArray转换为double数组

时间:2014-03-18 12:52:29

标签: c++ arrays qt reinterpret-cast qbytearray

我有一个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>打包的优雅方式 你能救我吗?

2 个答案:

答案 0 :(得分:7)

您可以使用QDataStream来编码a specific format.中的二进制数据(更具体地说,首先是项目数(int32),然后是每个项目)

QVectoroverloads for the stream operators

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

并阅读:

QVector<double> data;
QDataStream stream(line);
stream >> data;

答案 1 :(得分:0)

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