C++ Qt:按位运算

Dmi*_*tri 3 c++ qt bit-manipulation

我正在为大学开展一个小项目,我需要通过网络模拟传输,并对不同类型的纠错算法进行推理和可视化.我改进的数据包由一个quint8组成:我需要将它转换为一个位数组,如QBitArray,向它附加一个校验位,通过UDP传输它,用校验位检查传输是否成功,然后从中构造quint8 .再一次,这不是一个实际但教育性的任务,所以不要建议我使用像CRC这样的真实算法......

所以我的问题是:如何将任何数据类型(在本例中为quint8)转换为QBitArray?我的意思是计算机中的任何数据都是一个位数组,但我如何访问它是个问题.

谢谢,德米特里.

Tim*_*imW 5

让我们看看我们是否可以正确使用它

template < class T >
static QBitArray toQBit ( const T &obj ) {
    int const bitsInByte= 8;
    int const bytsInObject= sizeof(T);

    const quint8 *data = static_cast<const quint8*>(&obj) ;
    QBitArray result(bytsInObject*bitsInByte);
    for ( int byte=0; byte<bytsInObject ; ++byte ) {
        for ( int bit=0; bit<bitsInByte; ++bit ) {
            result.setBit ( byte*bitsInByte + bit, data[byte] & (1<<bit) ) ;
        }
    }
    return result;
}

void Foo () {
    Bar b ;
    QBitArray qb = toQBit ( b ) ;
}
Run Code Online (Sandbox Code Playgroud)