QVariant::DataPtr
是私有的,昨天我使用QBitArray
做了一些工作。有一个函数data_ptr()
返回DataPtr&
,但我不知道何时以及如何使用此函数。我将返回的数据写入文件并在ST2中打开,显示SOH
:
int main()
{
QBitArray bit(8);
bit[5] = true; //--> I tried bit[7] = true; result is `SOH` still
QFile file("out");
file.open(QIODevice::WriteOnly);
QDataStream outs(&file);
outs << bit.data_ptr();
file.close();
return 0;
}
我知道SOH
是Start Of Header
的含义,它被定义为0x01
(1byte)用于帧分隔。首先我写了bit[7]=true;
所以我认为bit.data_ptr()
可能是bit
中的原始数据(二进制00000001),它是封装的QBitArray
。但是当我尝试bit[5]=true;
并在ST2中打开文件时,它仍然显示SOH
。所以我很困惑。
答案 0 :(得分:1)
data_ptr
是指向Data
的指针。例如,您可以使用data_ptr
将QbitArray转换为char *:
auto data = bit.data_ptr()->data();
所以data[0]
是bit
的大小(这里是8),其他是bit
的值。例如:
QBitArray bit(16);
bit[5] = true;
bit[14] = true;
auto data = bit.data_ptr()->data();
位的值为0x4020。因此data[0]
为16,data[1]
为0x20,而data[2]
为0x40。
答案 1 :(得分:0)
DataPtr只是指向Data结构的指针。结构是私有的,所以你不应该使用它。但是,您可以使用指针来区分两个字节数组。使用QBitArray::operator<<()将位数组写入数据流。