在Qt中将int转换为QByteArray

7

我正在尝试将一个整数转换为QByteArray。我使用的方法是QByteArray::number(m_vman);,这样正确吗?

我正在尝试使用number()来获取一个整数到QByteArray

我正在尝试以下代码,但bytearray为零。

    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;

可能是Storing integer to QByteArray using only 4 bytes的重复问题。 - IAmInPLS
你的代码有效。这个问题与此无关。你甚至都没有费心检查自己的代码是否有效 :( - Kuba hasn't forgotten Monica
5个回答

12

你可以像这样简单地做。

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

3
::number或.setNum将数字转换为字符串,而不是实际值。 - Ali

3

与实际问题标题相关的是,以下静态函数应该绝对可行:

QByteArray::number


1

我将其标记为重复问题,因为你可以搜索得更好(说真的,有数十个类似的问题)。不管怎样,这是最简单的解决方案:

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

它是一个布尔变量。 - andreahmed
我正在检查m_htman是否为真,如果是的话,我将字节数组设置为结果字节数组。 - andreahmed
你可以像你现在这样使用 ::number(),但问题是你无法处理大数字。 - IAmInPLS

1

这个帖子已经相当古老,因为我刚刚发现了这个问题(或类似的问题),这是我的建议:

如果要将整数变量的值(这里并没有完全定义该值的具体含义,我指的是字节中的内存表示)存储在 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"

0

数组不为零,您的代码运行正常:

#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() + '\0' + '\0' + '\0' + '\1';
   auto two = QByteArray() + '\0' + '\0' + '\0' + '\2';
   Q_ASSERT(test(true) == one);
   Q_ASSERT(test(false) == two);
}

如果其中存储的值为零,那么它可能是“零”,但这是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接