問題タブ [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.
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 (読みすぎ) になることもあれば、そうでないこともあります。ストリームの「サイズ」を取得するにはどうすればよいですか?
qt - QDataStream を使用した enum による QSet の (デ) シリアル化
Qt 4.8.7 を使用しています。と がenum Color {red, green, blue}
ありQSet<Color>
ます。を使用してどのように (逆) シリアル化QSet<Color>
する必要がありQDataStream
ますか? カスタム型で逆シリアル化が失敗します。逆シリアル化以外に手動でシリアル化 (QSet 要素のループ) を作成する必要がありますか? QSet の内部シリアライゼーションの実装は、理論的には Qt 開発者によって変更される可能性があるため、シリアライゼーション/デシリアライゼーション用の 2 つのループを自分で作成する必要があります。
c++ - QDataStream が QByteArray の位置を増やさない
生のネットワーク バイトを QDataStream オブジェクトに繰り返し書き込むと、QDataStream は基になる QByteArray の書き込み位置を増やしません。
コードは次のとおりです。
なぜこうなった?
コードは Linux Mint 18 64Bit で正常に動作します。ただし、Windows 10 64Bit では動作しません。
Qt 5.9.1 で Qt Creator 4.3.1 を使用しています。
qt - QDataStream と QTcpSocket を介した送受信構造
QTcp ソケットを介して構造を送受信する方法について混乱しています。
私のパケットがバイト単位でこのように見えるとしましょう (01 00 00 68 65 6c 6c 6f )
構造体を構築し、qdatastream 演算子を使用して、パケット データを逆シリアル化またはシリアル化します....
パディングはどうすればいいの...
いくつかの例が役に立ちます