【问题标题】:QbyteArray data copyQbyteArray 数据拷贝
【发布时间】:2014-05-11 22:06:13
【问题描述】:

我有两个QByteArraysDatadData

我想将n 字节从dData 中的位置x&dData[x] 复制到sData 的位置y&sData[y]

在 C 中,数组复制由 memcpy(&dData[x], &sData[y], n); 完成

如何在Qt中复制QByteArray以上的数据?

【问题讨论】:

  • 这不是一个答案,而是一个重要的考虑因素:请记住,QByteArray 的原始数据工具允许您使用 QByteArray 对象作为 C 数组的前端。它不会从所述原始数据中复制任何内容,并且您不能将此类 QByteArray 对象传递到原始数据存在的范围之外。

标签: qt qbytearray


【解决方案1】:

Qt documentation,你可以使用替换功能:-

QByteArray & QByteArray::replace(int pos, int len, const QByteArray & after)

用后面的字节数组替换索引位置pos的len个字节,并返回对该字节数组的引用。

所以,使用重载

QByteArray & QByteArray::replace(int pos, int len, const char * after);

sData = sData.replace(y, nBytes, dData.constData()+x);

【讨论】:

    【解决方案2】:

    除了给定的答案之外,您还可以使用memcpyQByteArray::data() 成员来获取指向内部数组的指针。当然,您有责任确保目标数组的大小足以容纳从源数组复制的所有数据。

    memcpy(dest.data() + y, src.constData() + x, n)
    

    【讨论】:

    • 如果有 memcpy C++ 替代品,我们应该使用 setRawData 或替换之类的替代品
    【解决方案3】:

    如果你想从索引零复制数据,有一个函数:

    sData.setRawData(dData, n);
    

    【讨论】:

    • 仅供参考:此答案具有误导性,因为未复制数据。 setRawData 的 Qt 文档指出:“字节不会被复制。QByteArray 将包含数据指针。调用者保证只要此 QByteArray 及其任何未修改的副本存在,就不会删除或修改数据。 "
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    相关资源
    最近更新 更多