問題タブ [qdatastream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
828 参照

c++ - QTcpSocket から (多くの) 値を読み取る (高速)

最大 70 kHz の tcp ソケットを使用して (バイナリ) float 値を送信する測定デバイスを使用しています。

私の目標は、これらの値をできるだけ速く読み取り、プログラムの他の部分で使用することです。

今まで、QTcpSocket と QDataStream を使用して値ごとに値を抽出できました。

最初にソケットを作成し、それにストリームを接続します

次に、ソケットから読み取り、ストリーム データを float 値に書き込みます。

while(true) ループの反復周波数を測定すると、約 30 kHz を達成できます。読み取りごとに複数の値を読み取ると、最大 70 Khz に達することがあります。(私を遅くするかもしれない他の計算を考慮に入れていません)

私の質問は次のとおりです。

  • 一度に複数の値を読み取る場合、QDataStream からこれらの値を抽出するにはどうすればよいですか? 値を含む 4 バイトのみで 6 バイトの間隔が必要です。

回答:私の場合、2 バイト (ゴミ箱) の後に既知の数の値が続きます。たとえば、float の場合は 4 バイト、別の float の場合は 4 バイト、uint16 の場合は 2 バイトです。

  • 展開 1: さまざまな変数に書き込む必要があるさまざまな型 (int、float) のさまざまな値を送信するようにデバイスを構成できます。

答え:同じです。

  • QTcpSocket から多くの値を読み取るより効率的な方法はありますか?

回答:コメントで回答しました。

更新(いくつかの質問に答えるために):

  • バイト単位の最大レート: 70 kHz x 6 バイト (1 つの値に対して) = 420 kB/s (それほど多くはないようです :))

更新 2

  • 新しい質問: (を使用して) トランザクションを開始するとき、stream.startTransactionそのストリーム内の内容をバイナリ コードで知りたいです。
  • 仕組みがわかりませんQDataStream::startTransaction。何バイト読まれますか?を使用して抽出しないデータはどうなり>>ますか?

私は次のことを試しました:

これを何度も繰り返していると、status = -1 (読みすぎ) になることもあれば、そうでないこともあります。ストリームの「サイズ」を取得するにはどうすればよいですか?

0 投票する
1 に答える
282 参照

qt - QDataStream を使用した enum による QSet の (デ) シリアル化

Qt 4.8.7 を使用しています。と がenum Color {red, green, blue}ありQSet<Color>ます。を使用してどのように (逆) シリアル化QSet<Color>する必要がありQDataStreamますか? カスタム型で逆シリアル化が失敗します。逆シリアル化以外に手動でシリアル化 (QSet 要素のループ) を作成する必要がありますか? QSet の内部シリアライゼーションの実装は、理論的には Qt 開発者によって変更される可能性があるため、シリアライゼーション/デシリアライゼーション用の 2 つのループを自分で作成する必要があります。

0 投票する
0 に答える
1003 参照

c++ - QDataStream が QByteArray の位置を増やさない

生のネットワーク バイトを QDataStream オブジェクトに繰り返し書き込むと、QDataStream は基になる QByteArray の書き込み位置を増やしません。

コードは次のとおりです。

なぜこうなった?

コードは Linux Mint 18 64Bit で正常に動作します。ただし、Windows 10 64Bit では動作しません。
Qt 5.9.1 で Qt Creator 4.3.1 を使用しています。

0 投票する
1 に答える
813 参照

qt - QDataStream と QTcpSocket を介した送受信構造

QTcp ソケットを介して構造を送受信する方法について混乱しています。

私のパケットがバイト単位でこのように見えるとしましょう (01 00 00 68 65 6c 6c 6f )

構造体を構築し、qdatastream 演算子を使用して、パケット データを逆シリアル化またはシリアル化します....

パディングはどうすればいいの...

いくつかの例が役に立ちます