Проблема выравнивания байтов при использовании Preon - PullRequest
0 голосов
/ 03 февраля 2011

Привет всем :) В настоящее время я использую preon для проекта в свободное время и столкнулся со следующей проблемой: я пытаюсь прочитать строку фиксированной длины со следующим кодом:

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

Спецификация файла ожидает заполнения переменной, так что смещение следующего блока кратно 4. Например, если string_size = 5, то будут добавлены 3 нулевых байта и так далее. Сначала я думал, что аннотация @ByteAlign делает именно это, однако, изучая исходный код, я понял, что это не так.

Я попытался сделать это быстрое исправление:

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

К сожалению, Limbo, похоже, не поддерживает оператор "%". Есть ли способ обойти это?

(Кроме того, где / как я могу получить последнюю версию?) Заранее спасибо.

1 Ответ

0 голосов
/ 06 февраля 2011

Preon в настоящее время не имеет встроенного решения вашей проблемы.Как вы сказали, это язык выражений, в котором нет оператора по модулю, и похоже, что вы можете использовать его.Однако вы можете реализовать свой собственный CodecDecorator, что, вероятно, вы и хотите сделать.Вы можете реализовать CodecDecorator, который вставляет кодек, считывающий пару экстракционных байтов после того, как он декодировал значение.

Последняя версия Preon находится в Codehaus:

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

Вы можете проверить заголовок, но есть также отдельная ветвь, называемая PREON-35, в которой есть биты для выполнения того, что обсуждается здесь .

...