0

如何从 qint 值中获取 QBitArray?我需要更改一些位数,所以我想使用 QBitArray 。

4

3 回答 3

2

QBitArray 的 '>>' 运算符期望位集大小为前 4 个字节,因此 JustMaximumPower 的snipper 将不起作用。正确的数据流应如下所示:

QBitArray bits;

quint32 size = 32;
quint32 value = 1337;
QByteArray data;
QDataStream stream(data, QIODevice::ReadWrite);
stream << size << value;
stream.device()->seek(0);
stream >> bits;

其实我觉得 QBitArray 不是很有用。您可以尝试 std::vector<bool> 用于可变大小或 std::bitset 用于固定大小(均来自 STL 库)。

std::bitset<32> bits(1337);
bits[0] = 1;
于 2015-01-12T14:15:35.030 回答
0

不是 testet 但应该可以工作:

qint value = 1337;
QBitArray bits;
QDataStream stream;

stream << value;
bits << stream;
于 2012-11-13T12:17:30.707 回答
-1

如果您只想更改一些位,那就QBitArray大材小用了。

int bitmask = 1 << 3; // let's change 4th bit
bitmask = 0x55555555; // or perhaps all odd bits

int number = 12345678;
number |= bitmask; // set to 1s
number &= ~bitmask; // set to 0s
number ^= bitmask; // negate what's already there
于 2012-11-13T12:18:57.037 回答