1

Cで記述されたサーバーと通信するプロジェクトにPreonを使用したい.プロトコルはマシンのネイティブエンディアンに依存し(java.nio.ByteOrder.getNative()JVMがサーバーと同じエンディアンを持っているという仮定の下でこれで解決できます)、uint64_tデータに使用します長さとint32_tステータス コード (負の値はエラーを示します)。

Preon のドキュメントには署名に関する情報が見つかりませんでした。ソースコードをざっと見てみると、符号nl.flotsam.preon.buffer.DefaultBitBuffer付きシフト (<<および>>) を使用していることがわかりました。また、いくつかのメソッドの javadoc コメントは、符号付き整数を使用nl.flotsam.preon.buffer.BitBufferしていることを示していますが、javadoc コメントnl.flotsam.preon.buffer.BitBufferは、BitBuffer符号なし整数を使用していると述べています。これは私を混乱させました。

Preon のデフォルトの整数形式は何ですか? uint64_tとをどのように表すint32_tか?

4

1 に答える 1

0

@BoundNumberでマークされたデータの場合、デフォルトはLittleEndianです。次のようにオーバーライドできます。

@BoundNumber(byteOrder=BigEndian)

…しかし、現在、プラットフォーム固有はオプションではありません。それが制限です。あなたはそれのために問題を提出することを検討したいかもしれません。(そうでなければ、私は将来どこかでそうします。)

私がそれが機能するのを見ることができる方法は、Platformと呼ばれる別の列挙型定数を持つことです。

アップデート:

バイトオーダーの場合、現在のPreon(現在はヘッドでのみ使用可能)には、BigEndian、LittleEndian、およびNativeの3つのオプションがあります。ネイティブは、java.nio.ByteOrder.getNative()で示されるバイト順序で解決されます。

結果として、次のようなコードを記述できるようになりました。

@BoundNumber(byteOrder=Native) int value;

…これは、アーキテクチャに基づいたバイト順序で、符号付き32ビット整数に変換されます。

于 2010-08-23T16:07:16.303 に答える