将 QBytearray 转换为 QBitarray

convert QBytearray to QBitarray

如何将 QBytearray 转换为 QBitarray? Qt 手册是这样说的:

for(int i=0; i<8; ++i) {
    for(int b=0; b<byteArray.count();b++) {
        bits.setBit( i*8+b, byteArray.at(i)&(1<<(7-b)) );
    }

但这会导致运行时错误。 有更好的方法吗?

循环看起来很奇怪,它用 i 为字节数组建立索引,i 变为 8,但 byteArray 可能没有 8 个元素。只需切换循环限制即可:

for(int i = 0; i < byteArray.count(); ++i) {
  for(int b = 0; b < 8; b++) {
    bits.setBit( i * 8 + b, byteArray.at(i) & (1 << (7 - b)) );
}

我们硬编码了 ex m_binaryMap.insert("A","1010");

的地图
QBitArray returnBitAr(const QByteArray &dataTOconvert)
    {
        QBitArray bitAr;
        int count = 0;
        bitAr.resize(4*dataTOconvert.length());
        QString byteData = dataTOconvert.data();
        for(int i = 0; i< dataTOconvert.length(); i++){
            QString value =  m_binaryMap.value(byteData.at(i));
            for(int j = 0; j< value.length(); j++){
                if(value.at(j) == "1"){
                    bitAr.setBit(count);
                }
                ++count;
            }
        }
        return bitAr;
    }

要转换的更好看的变体:

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<<b));

QBitArray -> QByteArray

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)<<(b%8)));