如何将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)) );
}
但是这会导致运行时错误。 有更好的方法吗?
答案 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)));