bit, byte, string convert to each other

QBitArray byte2bitArray( const QByteArray& byteArray, bool flag )
{
    QBitArray bits(byteArray.count()*8);
    if( flag )
    {
        for(int i=0; i<byteArray.count(); ++i)
            for(int b=0; b<8; ++b)
                bits.setBit(i*8+b, byteArray.at(i)&(1<<b));
    }
    else
    {
        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)) );
            }
        }
    }

    return bits;
}

QByteArray bit2byteArray( const QBitArray& bits, bool flag )
{
    QByteArray bytes;
    bytes.resize(bits.count()/8+1);
    bytes.fill(0);
    if( flag )
    {
        for(int b=0; b<bits.count(); ++b)
            bytes[b/8] = (bytes.at(b/8) | ((bits[b]?1:0)<<(b%8)));
    }
    else
    {
        for(int b=0; b<bits.count(); ++b)
            bytes[b/8] = (bytes.at(b/8) | ((bits[b]?1:0)<<(7-b%8)));
    }
    return bytes;
}

QString bitArray2String( const QBitArray& array )
{
    QString arrStr = "";
    for(int i = 0; i<array.size(); i++)
    {
        arrStr += array.at(i) ? '1' : '0';
    }
    return arrStr;
}

test code

QBitArray ba;
ba.fill(false,96);
ba.setBit(0,true);
ba.setBit(2,true);
QByteArray baa = bit2byteArray(ba);
qDebug() << ba;
qDebug() << baa.toHex();
qDebug() << bitArray2String(ba);
qDebug() << byte2bitArray(baa);
qDebug() << QByteArray::fromHex("AFFFFFFFFFFFFFFF");
qDebug() << byte2bitArray(QByteArray::fromHex("AFFFFFFFFFFFFFFF"));
除额外注明的地方外,本维基上的内容按下列许可协议发布: CC Attribution-Share Alike 4.0 International