0

みなさん、こんにちは:)私は現在、空き時間プロジェクトにpreonを使用していますが、次の問題が発生しました。次のコードで固定長の文字列を読み取ろうとしています。

@Bound int string_size;
@ByteAlign @BoundString(size = "string_size") my_string;

ファイル仕様では可変パディングが想定されているため、次のブロックのオフセットは4の倍数になります。たとえば、string_size = 5の場合、3つのnullバイトが追加されます。最初は@ByteAlignアノテーションがまさにこれを行っていると思っていましたが、ソースコードを調べてみると、そうではないことがわかりました。

私はこのクイックフィックスを作成しようとしました:

@If ("string_size % 4 == 2") @BoundList(size = "2", type = Byte.class) byte[] padding;

残念ながら、Limboは「%」演算子をサポートしていないようです。これを回避する方法はありますか?

(また、最新バージョンはどこで/どのように入手できますか?)よろしくお願いします。

4

1 に答える 1

0

Preon には現在、問題の解決策が組み込まれていません。おっしゃる通り、式言語にはモジュロ演算子がなく、使えそうです。ただし、独自の CodecDecorator を実装することもできます。これは、おそらくやりたいことです。値をデコードした後、いくつかの余分なバイトを読み取るコーデックを挿入する CodecDecorator を実装できます。

Preon の最新バージョンは Codehaus にあります。

git://git.codehaus.org/preon.git

ヘッドをチェックアウトすることもできますが、ここで説明されていることを実行するためのビットを持つ PREON-35 と呼ばれる別のブランチもあります。

于 2011-02-05T21:43:39.963 に答える