問題タブ [preon]
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.
preon - Preonを使用してオブジェクトフィールドのサイズとオフセットを取得する
Preonを使用してEclipse用の共有オブジェクトエディター/ビューアーを開発しています。エディターは次のようになります。
これを改善するために、上部パネルでエントリを選択すると、下部パネルで対応するバイトを強調表示する関数を実装したいと思います。これを行うには、Preonを使用してオブジェクトの特定のフィールドのサイズとオフセットを削除することは非常に興味深いことです。
どうすればそれを達成できますか?他にいくつかの選択肢はありますか?
preon - Preon encode() は、バイト境界に到達するまで残りのビットを埋めません
可変長の 7 ビット文字がエンコードされているメッセージがあります。残念ながら、これらの 7Bit 文字はメッセージに 7Bit として格納されます。これは、メッセージの最後のバイトが必ずしもバイト境界に揃えられていないことを意味します。
Preon でのメッセージのデコードは正常に機能しますが、以前にデコードされたメッセージを Preon でエンコードし、バイト配列を比較すると、配列の長さが一致しません。エンコードされたバイト配列は、元のバイト配列よりも 1 バイト小さくなっています。
バグを想定してPreonをデバッグしましたが、設計どおりに動作します。バイト境界に達すると、Preon は BitChannel への次の write() 呼び出しが発生するまで残りのビットを保存します。しかし、最後のバイトについては、それ以上の呼び出しはありません。
問題は、Preon に残りのバッファをフラッシュするように指示する方法があるかどうかです。
java - Preon 列挙型の解釈とマッピング
http://www.scribd.com/doc/8128172/Preon-Introductionによると、Preon を使用してビットを列挙型表現にデコードできます。
// Reads a bit from the buffer, and interprets it as an enum value,
// interpreting the number as its ordinal value.
@BoundNumber(size="2")
Type type;
さて、私の質問は次のような列挙型がある場合:
00 は常に VALUE_A にマップされ、01 は常に VALUE_B にマップされますか? これが常に当てはまると期待できますか?列挙型はJavaでどのように評価され、Preonはこの状況をどのように解決しますか?
public static enum TestEnum {
VALUE_A, VALUE_B
}
decode - Preon デコードしてからエンコードすると、同じバイト配列が返されない
Preon を使用して enum フィールドをバイト配列にエンコードしています。
最初のバイト (example-byte: 0xf7=1111 01 11) のフィールドは次のように設定されます。
デコードは正常に機能するため、デコードされたオブジェクトをエンコードしてバイト配列に戻すと、最初から持っていたのと同じバイト配列が生成されると予想されます。しかし、そうではありません。代わりに、最初のバイトのビットは次のようにエンコードされます。
0xdf=11 01 1111
つまり、セグメントは逆の順序でエンコードされます! デコードとエンコードが同じバイト配列を返さないのはなぜですか? どうすればいいですか?欠落している注文の注釈はありますか?
プレオンのドキュメントが不足しているように見えるため、返信していただきありがとうございます!
java - Preon Binary Parser による循環依存関係
相互に依存関係がある解析対象のバイナリ ファイルのペアがあります。Preonライブラリを使用しています。
ファイルの名前は rec.table および rec.offset です。一方は他方へのオフセット インデックスです (rec.offset ファイルの 32 ビット整数の行で、rec.table へのバイト オフセットを表します)。rec.offset の行数は、rec.table で使用可能なデータの 1 つ (recordCount フィールド) によって異なります。以下の @BoundList の状況に見られるように、オフセット エントリ リストのサイズを提供する必要があり、そのリストを使用してレコード エントリにアクセスする必要があります。
私は次の設定をしています:
と:
これを実行すると、記事「Preon での可変レコード長の解析」で報告されているようなエラーが表示されます。
このエラーは、オフセット配列のサイズ属性で recTable が使用されていることを示しています。他の質問と同様に、一定のサイズを指定するか、単純な @BoundNumber バインディングを偽造してそれを参照することで、このエラーを回避できます。
上記でリンクした他の質問では、循環依存関係が 2 つのクラスにまたがっている状況がありますが、1 つのファイルを解析しているときに、2 つの別々のファイルを解析する必要があります。Wilfred Springer が言及したパッチ (PREON-9) は、既に github リポジトリ (PREON-48) に統合されていると思います。
この循環依存に対処するにはどうすればよいですか? 私はトリックを逃していますか?
java - Preon のインストール方法を教えてください。
preon をインストールして IntelliJ 内で実行しようとしています。
https://github.com/preon/preonからソースコードをダウンロードしました。
次に、IntelliJ でプロジェクトを開きます。
次に、pecia をダウンロードし、モジュールとして preon プロジェクトにインポートします。
次に、...preon-master/preon-samples/preon-sample-bmp/src/test/java/org/codehaus/preon/sample/bmp/BitmapFileTest.java で BitmapFileTest プログラムを実行しようとしました。
ここに私が得る最初のいくつかのエラーがあります:
...preon-master/preon-el/src/main/java/org/codehaus/preon/el/Expressions.java
- エラー:(151, 24) java: シンボル symbol が見つかりません: クラス LimboWalker 場所: クラス org.codehaus.preon.el.Expressions
- エラー:(154, 9) java: シンボル symbol が見つかりません: クラス LimboLexer 場所: クラス org.codehaus.preon.el.Expressions
- エラー:(154, 32) java: シンボル symbol が見つかりません: クラス LimboLexer 場所: クラス org.codehaus.preon.el.Expressions
- エラー:(156, 9) java: シンボル symbol が見つかりません: クラス LimboParser 場所: クラス org.codehaus.preon.el.Expressions
- エラー:(156, 34) java: シンボル symbol が見つかりません: クラス LimboParser 場所: クラス org.codehaus.preon.el.Expressions
- エラー:(160, 9) java: シンボル symbol が見つかりません: クラス LimboWalker 場所: クラス org.codehaus.preon.el.Expressions
- エラー:(160, 55) java: シンボル symbol が見つかりません: クラス LimboWalker 場所: パッケージ org.codehaus.preon.el
何らかの理由で、コンパイラは独自のプロジェクトで Limbo クラスを見つけることができません。
このサンプル プロジェクトをビルドして実行するには、どうすればよいですか?
preon - BCD デコーダーとエンコーダーが必要です
Preon を使用して、無線からの構成データ (チャネル番号、周波数、モード、チャネル名など) をデコードし始めたところです。異なるラジオには異なるラジオ形式があり、通常は根本的に異なります。Preon は完璧なソリューションのようです。そしてその拡張可能。
1 つのラジオは、周波数データを BCD に配置します (8 桁の周波数が 4 バイトに格納されます)。したがって、Preon で BCD デコーダーとエンコーダーを開発する必要があると思います。Web で Preon について見つけられるすべての情報を読んだと思いますが、これについてどうすればよいかわかりません。
Preon 用のカスタム コーデックを開発したことがある場合は、開始方法のヒントを教えてください。
java - Preon フレームワークを使用した単純な演算
着信バイナリ データのストリームを読み取るために Preon Binding を使用しています。
私たちが抱えている問題は、特定のフィールド値が適切な表現のためにいくつかの単純な算術演算を必要とすることです。
- フィールド lat: デバイス座標からの緯度コンポーネント。バイナリ形式では、緯度を 1.000.000 で割る必要があります
- フィールド方向: デバイスの方位角を 3 で割った値
Preon はバインド時にそのような算術演算をサポートできますか、それともデコード後に具体的に行う必要がありますか (デコードされた DTO 値の一貫性が失われます)。
他のフィールド (latPositive および lngPositive) は、対応する値 (lat および lng フィールド) の数学記号 (負または正) を提供します。これは、負の場合に -1 を掛けるだけでサポートできると思いますが、それはある種の演算が実際に Preon でサポートされている場合は可能です。
マッピングは基本的に次のとおりです。
PS: Preon ユーザーのメーリング リストはありますか?
java - 分離されたビットを収集する Preon フレームワーク (実際にはニブル)
Preon を使用してデコードしようとしているバイナリ ストリームには、5 つの連続しないニブルで構成される値があります。次に例を示します。
16 進データ: 00A00000F200EE0000
ゼロ以外のマークされたニブルから AF2EE に値を抽出する必要があると考えてください。Preon を使用してそれは可能ですか? もしそうなら、そのようなヒントを教えてください。
PS: ゼロは単なる例であり、必要な位置のニブルが固定されているため、抽出するニブルを選択する基準を表すものではありません。
おそらく@wilfred-spingerが助けてくれるでしょうか?