如何在QByteArray中放置和检索位字段而不会感到痛苦?

How to put and retrieve bit fields in a QByteArray without pain?

本文关键字:字段 痛苦 检索 QByteArray      更新时间:2023-10-16

如何在QByteArray中放置和检索位字段而不会感到痛苦?

Qt wiki上有一篇文章(使用原始数据(,我希望它能有所帮助。

基本上,它说:

QBitArray表示单个位的数组。您可以测试和 使用运算符[]单独修改每个位,从而避免 必须使用位移和复杂的掩码与逻辑相结合 运营商 [...]

显然,我们需要一种方法 将QByteArray转换为QBitArray.本文也为此提供了一个解决方案:

QByteArray bytes = ...;
// Create a bit array of the appropriate size
QBitArray bits(bytes.count()*8);
// Convert from QByteArray to QBitArray
for(int i=0; i<bytes.count(); ++i) {
for(int b=0; b<8;b++) {
bits.setBit( i*8+b, bytes.at(i)&(1<<(7-b)) );
}
}

而且,同样:

QBitArray bits = ...;
// Resulting byte array
QByteArray bytes;
// Convert from QBitArray to QByteArray
for(int b=0; b<bits.count();++b) {
bytes[b/8] = (bytes.at(b/8) | ((bits[b]?1:0)<<(7-(b%8))));
}