繁体   English   中英

在 Qt 中将一个 int 转换为 QByteArray

[英]convert an int to QByteArray in Qt

我正在尝试将 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;

该数组不为零,您的代码工作正常:

#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);
}

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

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

要在 QByteArray 中存储 integer 变量的值(此处未准确定义值,我的意思是 memory 以字节表示),我建议:

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(':');
}

Output(字节为小端表示法):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM