1

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()可能是原始数据(二进制中的 00000001),bit其中封装了QBitArray. 但是当我尝试bit[5]=true;在 ST2 中打开文件时,它仍然显示SOH. 所以我很困惑。
在此处输入图像描述

4

2 回答 2

1

DataPtr只是一个指向数据结构的指针。该结构是私有的,所以你不应该将它用于任何事情。但是,您可以使用指向它的指针来区分两个字节数组。使用QBitArray::operator<<()将位数组写入数据流。

于 2012-11-13T11:19:07.413 回答
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。

于 2020-01-25T12:09:28.823 回答