将int转换为Qt中的QByteArray

convert an int to QByteArray in Qt

本文关键字:中的 QByteArray Qt int 转换      更新时间:2023-10-16

我正在尝试将int转换为QByteArray。我用的是QByteArray::number(m_vman);这个方法,对吗?

我正在尝试使用number()来获取QByteArray的int。

我正在尝试以下代码,但字节数组为零

    QByteArray vmanByteArray, vheaterByteArray;
    QDataStream streamVMan(&vmanByteArray, QIODevice::WriteOnly);
    QDataStream streamVHeater(&vheaterByteArray, QIODevice::WriteOnly);
    streamVMan << m_vman;
    streamVHeater << m_vheater;
QByteArray arr = m_htman ? vmanByteArray : vheaterByteArray;

您可以简单地这样做。

int myInt = 123;
QByteArray q_b;
q_b.setNum(myInt);

与实际问题标题相关,以下静态函数应该肯定有效:

QByteArray::number

我标记为重复,因为你本可以搜索得更好(说真的,有很多这样的问题)。无论如何,这是最简单的解决方案:

int myInt;
QByteArray bA;
QDataStream stream(&bA, QIODevice::WriteOnly);
stream << myInt;

这个线程很旧,因为我刚刚偶然发现了这个问题(或类似的问题),下面是我的建议:

为了在QByteArray中存储整数变量的值(这里没有确切定义值,我指的是以字节为单位的内存表示),我建议:

QByteArray arr = QByteArray::fromRawData(reinterpret_cast<const char *>(&m_vman), sizeof(m_vman));

测试用例:

#include <QtCore>
int main() {
    qint64 intValue = 42;
    QByteArray bytes = QByteArray::fromRawData(reinterpret_cast<const char *>(&intValue), sizeof(intValue));
    qDebug() << "intValue: " << intValue;
    qDebug() << "bytes:    " << bytes.toHex(':');
}

输出(字节是小端序表示):

intValue:  42
bytes:     "2a:00:00:00:00:00:00:00"

数组不是零,您的代码运行良好:

#include <QtCore>
QByteArray test(bool m_htman) {
   int m_vman = 1;
   int m_vheater = 2;
   QByteArray vmanByteArray, vheaterByteArray;
   QDataStream streamVMan(&vmanByteArray, QIODevice::WriteOnly);
   QDataStream streamVHeater(&vheaterByteArray, QIODevice::WriteOnly);
   streamVMan << m_vman;
   streamVHeater << m_vheater;
   QByteArray arr=m_htman ?  vmanByteArray: vheaterByteArray;
   return arr;
}
int main() {
   auto one = QByteArray() + '' + '' + '' + '1';
   auto two = QByteArray() + '' + '' + '' + '2';
   Q_ASSERT(test(true) == one);
   Q_ASSERT(test(false) == two);
}

如果存储在其中的值是零,它可能是"零",但这是正确的。