問題タブ [qbytearray]
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++ - Qtquint32QDataStreamを使用したリトルエンディアン
QDatastreamを使用して、以下のようなリトルエンディアンARMマシン上のQByteArrayからquint32配列にデータを入力しています。
問題はバイトオーダーにあります。headerBuffer [113]の32ビットフィールドの最後の4ビットを取得する必要があるため、headerBufferのそのエントリを0xfとAND演算しようとしました。このフィールドに対してチェックする期待値は「3」です。ただし、このAND演算では、以下に示すように「a」が返されます。エントリが「0x1a13&0x000f」になるようにバイトを交換すると、「3」になります。私が見ているものと比較して、期待される値の他のいくつかの例を以下に見ることができます。そのため、QDataStreamのByteOrderをLittleEndianに設定していますが、それでも目的の結果が得られません。私は何が間違っているのですか?0x131aの代わりに0x1a13を取得するにはどうすればよいですか?ありがとう!
c++ - ベスト プラクティス: QDataStream を解釈/処理する方法は?
Qt 以外の別のプログラムによって作成された定義済み構造のストリーミング バイナリ データ (QDataStream) を処理する必要があります。そのデータを解釈するためのベストプラクティスは何だろうか。データがテレグラムで次のように構造化されており (構造体定義が提供されている)、自分で変更できないとします。
4 バイトのヘッダー | 2 バイトのシーケンス番号 | 1 バイトのチェックサム | 10バイトデータ
「Telegram」クラスでデータを処理するには、次の可能性があります。
- Telegram クラスには、プライベート QByteArray メンバー変数があります。すべてのデータ (17 バイト) は、readRawData メソッドを使用してストリームから一度に読み取られ、そこに格納されます。変数は
return (array.at(4)<<8) + array.at(5)
、シーケンス番号のような public メソッドでアクセスおよび解釈されますが、あまり洗練されていません。 - Telegram クラスには、構造体と結合した public char[17] メンバー変数があります。すべてのデータは、readRawData を使用してストリームから読み取られ、そこに格納されます。後で変数にアクセスするとき、これは構造体に対してのみ行われ
telegramstruct.squenceNumber
ます。エンディアンやパディングなど、このメソッドには潜在的な問題があることがわかります。 - Telegram クラスには、 のような電報フィールドごとにプライベート メンバー変数があります
QString strHeader
。ストリームからテレグラムを読み取るとき、データはこれらの変数に直接保存されます。読み取りは readRawData または基本型の operator>> を使用して行われます。
処理するデータが多いため、コードはできるだけ高速にする必要があります。MinGW を使用して Windows で Qt 5.0.1 を使用しています。
私の質問:
- 上記の解決策のうち、ベスト プラクティスで高速なのはどれですか。それとも、より良い方法がありますか?
- 1 のように一度にすべてを読み取るのは、3 のように 4 バイト、2 バイト、1 バイトなどを読み取るよりも高速ですか?
- 1 と 3 では、定義済みの構造体で提供されたヘッダー ファイルを使用できません。それは悪い習慣でしょうか?
- QByteArray と構造体との一種の「ユニオン」を持つことは何とか可能ですか?
- ソリューション 3 でチェックサムを簡単に計算するにはどうすればよいですか?
ご意見やヒントをどうもありがとうございます。
クリス
qt - ストリーム演算子で埋めようとした後、QBitArrayのサイズはゼロのままです
QBitArray のサイズがゼロのままなのはなぜですか? Qt 5.0.2 を使用しています。
qt - QFileInfo をシリアライズする
ファイルのリストがあり、すべてのファイルのファイル情報をシリアル化し、ソケット経由で送信したいと考えています。
たとえば、次のようにシリアル化できることがわかりました。
のサポートが見つかりませんでしたQFileInfo
。このQt
データ型をシリアル化することは可能ですか? このタイプの簡単な完全シリアル化を取得する方法はありますか、それともデータをプリミティブ単位に分割する必要があるだけですか?
c++ - QT5 C++ QByteArray XML パーサー
次のxmlを取得します
Data と呼ばれる QByteArray に保存するソケットを介して。
xml からすべての値を抽出して、さまざまな変数 (整数として、QString として) に保存したいと考えています。
私の主な問題は<D>125</D>
、タグ間の値を持つようなxml文字列と、タグ<Te T210="10.00" T29="9... />
文字列自体で値を取得したようなxml文字列を区別する方法がわからないことです。
私のコードはこれまでのところ次のようになります。
c++ - QByteArray は最初の 4 行を削除します
QByteArray があり、最初の 4 行を削除する必要があります。たとえば、正規表現でそれを行うことができますが、もっと簡単な方法はありますか?
UPD: QByteArray の最初の行 (4 行以上) はテキストで、最後に '\n' があります。
qt - Qt: ファイルの特定の位置に QByteArray を挿入する
QByteArray
ファイルの特定の位置にを挿入することはできますか? たとえば、既に 100 KB のデータを含むファイルがある場合、QByteArray
たとえば 20 の位置に挿入することはできますか? その後、0KB から 20KB のデータの順で構築されるファイル、その次に 20KB から 100KB のデータの順で構成さQByteArray
れます。
c++ - sqlite3 (c++) に部分的に挿入された blob データとしての QByteArray
QNetworkAccessManager
でダウンロードした画像データを挿入しようとしていますQByteArray
。QByteArray
これを BLOB として挿入しようとしています。私のテーブル作成クエリは
このような挿入クエリを作成しました。
しかし、表示されるクエリを印刷すると、
BLOB データの長さはわずか 4 です。そして、いくつかの奇妙な値を持っています。内容のスクリーンショット*imageData
は、
画像の長さは 256*256*4 です。jpeg画像です。
編集: CL のコードに従ったところ、IMAGE_DATA 列にいくつかのダイアモン形状の文字が含まれるようになりました。画像は以下です。
qt - QByteArray と unsigned char* の速度
QByteArray と unsigned char* の速度に違いがあることを知りたいですか? 私のプログラムには多くのバイト配列とコピー操作があるため、違いがあるかどうかを知ることは重要です。ありがとう