Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QbyteArray数据副本_Qt_Qbytearray - Fatal编程技术网

Qt QbyteArray数据副本

Qt QbyteArray数据副本,qt,qbytearray,Qt,Qbytearray,我有两个QByteArray,sData和dData 我想将n字节从dData中的x位置复制到sData的y位置,即和sData[y] 在C语言中,数组复制由memcpy(&dData[x],&sData[y],n)完成 如何在Qt中复制QByteArray的上述数据?从,您可以使用替换功能:- QByteArray & QByteArray::replace(int pos, int len, const QByteArray & after) 将索引位置pos中的len字节

我有两个
QByteArray
sData
dData

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

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

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

从,您可以使用替换功能:-

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);

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

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

如果要从索引0复制数据,有一个函数:

sData.setRawData(dData, n);

如果有一个MeMCPY C++替代品,我们应该使用SETRAWDATA或替换这一替代方案,这不是一个答案,而是一个重要的考虑因素:请记住QByteArray的原始数据工具允许使用QByTurRayObjor作为C数组的前部。它不会复制上述原始数据中的任何内容,您也不能将此类QByteArray对象从原始数据存在的范围中传递出去。仅供参考:这个答案是误导性的,因为数据没有被复制。setRawData的Qt文档声明:“未复制字节。QByteArray将包含数据指针。调用者保证,只要此QByteArray及其任何未修改副本存在,数据就不会被删除或修改。”