13

正如您可能已经从标题中发现的那样,我在将 a 转换QByteArray为整数时遇到了问题。

 QByteArray buffer = server->read(8192);
 QByteArray q_size = buffer.mid(0, 2);
 int size = q_size.toInt();

但是,size为 0。buffer不接收任何 ASCII 字符,我相信toInt()如果它不是 ASCII 字符,该函数将无法工作。应该是 37 ( int size0x25),但是 - 正如我所说 - 它是 0。

q_sizeis (0x2500或其他字节顺序 - 0x0025)。

这里有什么问题?我很确定q_size拥有我需要的数据。

4

8 回答 8

28

像这样的东西应该可以工作,使用数据流从缓冲区读取:

QDataStream ds(buffer);
short size; // Since the size you're trying to read appears to be 2 bytes
ds >> size;

// You can continue reading more data from the stream here
于 2009-08-11T17:46:06.600 回答
9

如果 int包含带数字的字符串,则该toInt方法解析 int 。QByteArray您想将原始位解释为整数。我认为 in 中没有这种方法QByteArray,因此您必须自己从单个字节构造值。可能这样的事情会起作用:

int size = (static_cast<unsigned int>(q_size[0]) & 0xFF) << 8
         + (static_cast<unsigned int>(q_size[1]) & 0xFF);

(或相反,取决于字节序)

于 2009-08-09T16:49:49.160 回答
8

我自己没有尝试过,看看它是否有效,但从 Qt 文档中看起来你想要一个 QDataStream。这支持提取所有基本的 C++ 类型,并且可以使用 QByteArray 作为输入来创建。

于 2009-08-09T20:45:25.017 回答
5
bool ok;
q_size.toHex().toInt(&ok, 16);

为我工作

于 2015-09-02T14:41:27.860 回答
1

我在将串行数据转换(QByteArray)为用作 a 值的整数时遇到了很大的问题Progress Bar,但以一种非常简单的方式解决了它:

QByteArray data = serial->readall();
QString data2 = tr(data); //converted the byte array to a string
ui->QProgressBar->setValue(data2.toUInt()); //converted the string to an unmarked integer..
于 2016-08-10T11:59:25.580 回答
0

这对我有用:

QByteArray array2;
        array2.reserve(4);
        array2[0] = data[1];
        array2[1] = data[2];
        array2[2] = data[3];
        array2[3] = data[4];

        memcpy(&blockSize, array2, sizeof(int));

data是一个 qbytearray,从 index = 1 到 4 是数组整数。

于 2011-06-09T23:36:42.890 回答
0

创建一个在您的 QByteArray 上运行的 QDataStream。文档在 这里

于 2014-05-03T22:28:23.730 回答
0

试试toInt(bool *ok = Q_NULLPTR, int base = 10) constQByteArray 类的方法。

QByteArray 文档:http://doc.qt.io/qt-5/QByteArray.html

于 2018-03-21T14:57:38.060 回答