仅使用4个字节将整数存储到QByteArray

Pri*_*alj 9 c++ qt integer qbytearray

它需要4个字节来表示整数.如何将inta 存储在一个QByteArray只需4个字节的位置?

  • QByteArray::number(..) 将整数转换为字符串,从而占用超过4个字节.
  • QByteArray((const char*)&myInteger,sizeof(int)) 似乎也没有用.

RA.*_*RA. 17

有几种方法可以将整数放入a中QByteArray,但以下通常是最干净的:

QByteArray byteArray;
QDataStream stream(&byteArray, QIODevice::WriteOnly);

stream << myInteger;
Run Code Online (Sandbox Code Playgroud)

这样做的好处是可以相当方便地将几个整数(或其他数据类型)写入字节数组.它还允许您使用设置数据的字节顺序QDataStream::setByteOrder.

更新

虽然上面的解决方案可行,但QDataStream存储整数所使用的方法可能会在Qt的未来版本中发生变化.确保它始终有效的最简单方法是显式设置以下所用数据格式的版本QDataStream:

QDataStream stream(&byteArray, QIODevice::WriteOnly);
stream.setVersion(QDataStream::Qt_5_10); // Or use earlier version
Run Code Online (Sandbox Code Playgroud)

或者,您可以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));
Run Code Online (Sandbox Code Playgroud)

  • @StephenChu在什么情况下它不会产生一个4字节的数组(特别是如果`myInteger`的类型为`qint32`或`quint32`)? (3认同)