我正在为大学做一个小项目,我需要对网络传输进行建模,并实现和可视化各种错误校正算法。我的简易数据包包含一个quint8:我需要将其转换为一个位数组,例如QBitArray,向其添加一个校验位,通过UDP传输它,使用校验位检查传输是否成功,然后从中构造quint8 。
再一次,这不是一个实际的但有教育意义的任务,所以不要建议我使用像CRC这样的真正算法。

所以我的问题是:如何将任何数据类型(在这种情况下为quint8)转换为QBitArray? 我的意思是计算机中的任何数据都是位数组,但是如何访问它是个问题。

谢谢,德米特里。

最佳答案

让我们看看是否可以正确处理

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

07-27 22:56