Для представления целого числа требуется 4 байта. Как я могу хранить int
в QByteArray
так что это займет всего 4 байта?
QByteArray::number(..)
преобразует целое число в строку, занимая более 4 байтов.QByteArray((const char*)&myInteger,sizeof(int))
тоже не похоже на работу.Есть несколько способов поместить целое число в QByteArray
, но следующие обычно самые чистые:
QByteArray byteArray;
QDataStream stream(&byteArray, QIODevice::WriteOnly);
stream << myInteger;
Это имеет то преимущество, что позволяет довольно удобно записывать несколько целых чисел (или других типов данных) в байтовый массив. Это также позволяет вам установить порядок данных с помощью QDataStream::setByteOrder
,
Хотя приведенное выше решение будет работать, метод, используемый QDataStream
хранить целые числа могут измениться в будущих версиях Qt. Самый простой способ убедиться, что он всегда работает — это явно установить версию формата данных, используемого QDataStream
:
QDataStream stream(&byteArray, QIODevice::WriteOnly);
stream.setVersion(QDataStream::Qt_5_10); // Or use earlier version
Кроме того, вы можете избежать использования QDataStream
в целом и использовать QBuffer
:
#include <QBuffer>
#include <QByteArray>
#include <QtEndian>
...
QByteArray byteArray;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::WriteOnly);
myInteger = qToBigEndian(myInteger); // Or qToLittleEndian, if necessary.
buffer.write((char*)&myInteger, sizeof(qint32));
@ Primož Kralj не удосужился опубликовать решение своим вторым методом, так что вот оно:
int myInt = 0xdeadbeef;
QByteArray qba(reinterpret_cast<const char *>(&myInt), sizeof(int));
qDebug("QByteArray has bytes %s", qPrintable(qba.toHex(' ')));
печатает:
QByteArray has bytes ef be ad de
на машине x64.