Название: Как перегнать QBitArray в QByteArray ?
Отправлено: Ubuntu_linux от Март 10, 2011, 00:38
Как перегнать QBitArray в QByteArray ? Собственно обратно понятно как конвертировать, я делаю так: C++ (Qt) QBitArray DallasOneWire::toBitArray(QByteArray fromArray){ QBitArray outArray; outArray.resize(fromArray.size()*8);//! resize array for(int i=0;i<outArray.size();i++){ if(fromArray[i/8]>>i & 1){outArray.setBit(i,true);} }//for i qDebug()<<"out BitArray: "; //! out array for controll for(int i=0;i<outArray.size();i++){ if(outArray[i]==true){qDebug()<<"1";}else{qDebug()<<"0";} }//for return outArray; }//toBitArray
Но как конвертировать QBitArray в QByteArray ?
Название: Re: Как перегнать QBitArray в QByteArray ?
Отправлено: lit-uriy от Март 10, 2011, 20:00
Примерно так C++ (Qt) QByteArray convert(const QBitArray &in) { QByteArray out; int bitIndex = 0, byteIndex = 0; int bitCount = in.size(); while(bitIndex < bitCount){ char c; if (in[i]) c |= ( 1 << byteIndex); if (byteIndex >= 7){ byteIndex = 0; out.append(c); c = 0; } } return out; }
Название: Re: Как перегнать QBitArray в QByteArray ?
Отправлено: Ubuntu_linux от Март 12, 2011, 02:26
Почему когда я конвертирую 1 в битовое представления на виходе получается : " 0 0 1 1 0 0 0 1" Где взялись две единицы? ???
Название: Re: Как перегнать QBitArray в QByteArray ?
Отправлено: SimpleSunny от Март 12, 2011, 10:16
Кстати, тут ошибки нет? if(fromArray[i/8]>>i & 1), может надо было >>(i % 8)
Название: Re: Как перегнать QBitArray в QByteArray ?
Отправлено: brankovic от Март 12, 2011, 10:21
Почему когда я конвертирую 1 в битовое представления на виходе получается : " 0 0 1 1 0 0 0 1" Где взялись две единицы? ???
код единицы в ASCII это 49. То, что в текстовом файле рисуется как 1, на диске лежит как 00110001
Название: Re: Как перегнать QBitArray в QByteArray ?
Отправлено: Ubuntu_linux от Март 12, 2011, 11:41
Спасибо, понятно. ;) я так и подозревал, так как обратная конвертация в байт дает правильней результат. Вот функции которые я использую: C++ (Qt) QByteArray DallasOneWire::toByteArray(QBitArray bitArray){ QByteArray byteArray; char c; qDebug()<<"bitArraySize= "; qDebug()<<(int)bitArray.size(); for(int j=0;j<bitArray.size()/8;j++){ c='0'; for(int i=0;i<bitArray.size();i++){if (bitArray.testBit(i)){ c |= ( 1 << i);} }//! convert bit array to byte array byteArray.append(c); } qDebug()<<"Byte after: "; qDebug()<<byteArray; return byteArray; }//toBitArray QBitArray DallasOneWire::toBitArray(QByteArray fromArray){ QBitArray outArray; outArray.resize(fromArray.size()*8);//! resize array for(int i=0;i<outArray.size();i++){ if(fromArray[i/8]>>i & 1){outArray.setBit(i,true);} }//for i qDebug()<<"out BitArray: "; //! out array for controll QString str=""; for(int i=0;i<outArray.size();i++){ // if(outArray.testBit(i)){qDebug()<<1;}else{qDebug()<<0;} if(outArray.testBit(i)){str=str.insert(outArray.size()-i,"1");}else{str=str.insert(outArray.size()-i,"0");} }//for qDebug()<<str; return outArray; }//toBitArray
Название: Re: Как перегнать QBitArray в QByteArray ?
Отправлено: IGHOR от Сентябрь 07, 2012, 15:39
Может кому-то пригодиться. Конвертация QByteArray -> QBitArrayQByteArray 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 -> QByteArrayQBitArray 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)));
|