我正在为大学做一个小项目,我需要对网络传输进行建模,并实现和可视化各种错误校正算法。我的简易数据包包含一个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 ) ;
}