QByteArray.data() 和 constData() 的区别

问题描述

使用 Qt 5.8.0。

此代码按我的预期运行。

static const char mydata[] = {
   0x1,0x2,0x3,0x4
};

QByteArray ba  = QByteArray::fromRawData(mydata,sizeof(mydata));

const char *p  = ba.constData();
const char *pp = QByteArray::fromRawData(mydata,sizeof(mydata)).constData();

qDebug("%p %p\n",p,pp);

输出

0x40f548 0x40f548

转储

p  0x01 0x02 0x03 0x04  
pp 0x01 0x02 0x03 0x04

但是,我很难理解在使用 data() 而不是 constData() 之后这段代码会发生什么。

char *p = ba.data();
char *pp = QByteArray::fromRawData(mydata,sizeof(mydata)).data();

输出

0x166941e8 0x166f8e70

转储

p  0x01 0x02 0x03 0x04  
pp 0xee 0xfe 0xee 0xfe 0xee 0xfe ... (should be 0x01 0x02 0x03 0x04 ?)

解决方法

如 Qt 文档中所述,data() 函数为您提供指向 QByteArray 数据的指针的深层副本,因此每次调用时,它都会为您提供另一个值(不同的地址)。

虽然 constData() 为您提供了一个指向主对象的只读指针,因此每次调用时它的值都不会改变。

有关更多详细信息,您可以查看 here 的 data() 函数描述和 here 的 constData() 描述。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...