将 QBytearray 转换为 QBitarray
convert QBytearray to QBitarray
如何将 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)) );
}
但这会导致运行时错误。
有更好的方法吗?
循环看起来很奇怪,它用 i 为字节数组建立索引,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)) );
}
我们硬编码了 ex 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;
}
要转换的更好看的变体:
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)));
如何将 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)) );
}
但这会导致运行时错误。 有更好的方法吗?
循环看起来很奇怪,它用 i 为字节数组建立索引,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)) );
}
我们硬编码了 ex 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;
}
要转换的更好看的变体:
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)));