如何解决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()
为您提供了一个指向主对象的只读指针,因此每次调用时它的值都不会改变。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。