#ifndef BITARRAYEXT_H
#define BITARRAYEXT_H
#include <QtCore/QBitArray>
class QString;
class QBitArray;
class QByteArray;
class BitArrayExt
{
public:
inline BitArrayExt() {}
explicit inline BitArrayExt(const QBitArray &other) { m_bits = other; }
inline BitArrayExt(int size, bool value = false) { m_bits.fill(value, size); }
inline BitArrayExt(const BitArrayExt &other) { m_bits = other.m_bits; }
inline BitArrayExt &operator=(const BitArrayExt &other) { m_bits = other.m_bits; return *this; }
static BitArrayExt fromByteArray(const QByteArray &bytes);
static BitArrayExt fromChar(const char ch);
static BitArrayExt fromShort(const qint16 val);
static BitArrayExt fromInt32(const qint32 val);
static BitArrayExt fromInt64(const qint64 val);
inline QBitArray toBitArray() { return m_bits; }
QString toString();
private:
QBitArray m_bits;
};
#endif // BITARRAYEXT_H
#include "bitarrayext.h"
#include <QtCore/QString>
#include <QtCore/QByteArray>
BitArrayExt BitArrayExt::fromByteArray(const QByteArray &bytes)
{
QBitArray bits;
foreach (char ch, bytes) {
int inc_size = sizeof(char) * 8;
int base_size = bits.size();
bits.resize(bits.size() + inc_size);
for (int i = 0; i < inc_size; i++) {
bits[base_size + i] = ((ch & (1 << i)) >> i);
}
}
return BitArrayExt(bits);
}
BitArrayExt BitArrayExt::fromChar(const char ch)
{
return fromByteArray(QByteArray(&ch, sizeof(char)));
}
BitArrayExt BitArrayExt::fromShort(qint16 val)
{
return fromByteArray(QByteArray(reinterpret_cast<char *>(&val), sizeof(qint16)));
}
BitArrayExt BitArrayExt::fromInt32(qint32 val)
{
return fromByteArray(QByteArray(reinterpret_cast<char *>(&val), sizeof(qint32)));
}
BitArrayExt BitArrayExt::fromInt64(qint64 val)
{
return fromByteArray(QByteArray(reinterpret_cast<char *>(&val), sizeof(qint64)));
}
QString BitArrayExt::toString()
{
QString s;
for (int i = 0; i < m_bits.size(); i++)
s += m_bits.at(i) ? '1' : '0';
return s;
}
Может быть кому пригодится.