QByteArray为整数

时间:2009-08-09 16:10:41

标签: qt bytearray

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

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

但是,size为0. buffer没有收到任何ASCII字符,如果它不是ASCII字符,我认为toInt()函数不起作用。 int size应该是37(0x25),但是 - 正如我所说的 - 它是0。

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

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

8 个答案:

答案 0 :(得分:21)

这样的事情应该有效,使用数据流从缓冲区读取:

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

答案 1 :(得分:9)

如果QByteArray包含带数字的字符串,toInt方法将解析int。您希望将原始位解释为整数。我不认为在QByteArray中有一种方法,所以你必须自己从单个字节构造值。可能这样的事情会起作用:

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

(或者相反,取决于Endianness)

答案 2 :(得分:8)

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

答案 3 :(得分:1)

bool ok;
q_size.toHex().toInt(&ok, 16);

适合我

答案 4 :(得分:1)

我在将串行数据(QByteArray)转换为整数时遇到了很大问题,整数用作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..

答案 5 :(得分: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是数组整数。

答案 6 :(得分:0)

创建一个在QByteArray上运行的QDataStream。文档为here

答案 7 :(得分:0)

尝试使用QByteArray类的toInt(bool *ok = Q_NULLPTR, int base = 10) const方法。

Android-java- How to sort a list of objects by a certain value within the object