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

标签 c++ qt integer qbytearray

表示一个整数需要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/

相关文章:

C++:ifstream 作为参数

C++ - 荒谬的长距离

C++ 在 Qt 中传递 Double 添加数字

c# - 使用 C# 将字符串表达式转换为整数值

java - 从 args 打印出一组整数,输出为 : The numbers are 1, 2, 3, 4, 5

c++ - 在 VS1012 中使用 std::move 将 std::unique_ptr 发送到 std::thread

javascript - QML 鼠标在 MouseArea 中的绝对位置

c++ - Qt 4.6 是否默认在 Snow Leopard 上使用 Cocoa 编译?

javascript - 如何在 JavaScript 中将 1's and 0' 的数组转换为 ByteArray 或 Integer

c++ - 定义具有任意跨度的指针