将QBytearray转换为QBitarray

时间:2016-07-02 12:15:39

标签: arrays qt qbytearray

如何将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)) );
    }

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

3 个答案:

答案 0 :(得分:2)

循环看起来很奇怪,它使用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)) );
}

答案 1 :(得分:0)

我们对地图进行了硬编码,例如 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;
    }

答案 2 :(得分:0)

更好看的变体来转换:

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