表示一个整数需要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 的 future 版本中可能会发生变化。确保它始终有效的最简单方法是显式设置 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));
关于c++ - 仅使用 4 个字节将整数存储到 QByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668827/