【问题标题】:Convert from QByteArray to array of double从 QByteArray 转换为 double 数组
【发布时间】:2014-04-24 04:05:36
【问题描述】:

我有一个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();
}

但我不喜欢它。我想找到从QByteArray 解压到QVector&lt;double&gt; 的优雅方法 你能帮帮我吗?

【问题讨论】:

  • 注意:这不仅不优雅,而且易碎且不便携。

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


【解决方案1】:

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

QVector 拥有overloads for the stream operators

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

阅读:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我不反对你,但不同意你的回答。 Protocol Buffers 是一个二进制协议。 TCP 和 UDP 也是。
    • 我同意 G.P.B.是一个二进制协议。我的意思是需要使用严格定义的协议,如 QDataStream 或 G.P.B 来发送数据,并避免在 reinterpret_cast 的帮助下发送纯 C 二进制数据。
    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多