13

タイトルからわかるかもしれませんが、aQByteArrayを整数に変換する際に問題が発生しています。

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

ただし、sizeは 0 です。bufferは ASCII 文字を受け取りません。ASCII 文字でtoInt()ない場合、関数は機能しないと思います。はint size37 (0x25) である必要がありますが、前述のとおり、0 です。

は(または他のエンディアン順 - ) ですq_size0x25000x0025

ここで何が問題ですか?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

数字を含む文字列が含まれている場合、toIntメソッドは int を解析します。QByteArray生のビットを整数として解釈したい。にはそのための方法があるとは思わない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 に答える
0

QByteArray で動作する QDataStream を作成します。ドキュメントは こちら

于 2014-05-03T22:28:23.730 に答える
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 で、インデックス = 1 から 4 までは配列整数です。

于 2011-06-09T23:36:42.890 に答える