Пустой двоичный список с сопоставлением с образцом - PullRequest
2 голосов
/ 07 ноября 2011

Я пытаюсь проанализировать двоичный файл, и когда дело доходит до возвращения чисел, упакованных в порядке с прямым порядком байтов, в 16 бит, я надеюсь, что это будет работать:

foo(Bin, Bits) when is_binary(Bin) ->
    <<A, B, C, D, _Rest>> = Bin,
    (bar(<<A, B>>, Bits) =/= 0) and (bar(<<C, D>>, Bits) =/= 0).

bar(<<N:16/little-unsigned-integer>>, Bits) ->
    binary:at(Bits, N).

К сожалению, средство сопоставления не работает, если размер ячейки составляет 4 байта или меньше. Есть ли лучший способ сделать так, чтобы остальные могли быть пустыми? Если бы я мог избежать проверки двоичной длины в вызывающей стороне, тем лучше.

1 Ответ

1 голос
/ 07 ноября 2011

Вы можете сделать что-то вроде:

foo(<<A:16/little-unsigned-integer,B:16/little-unsigned-integer,_Rest/binary>>, Bits) ->
    (binary:at(Bits, A) =/= 0) and (binary:at(Bits, B) =/= 0).

Это не будет работать с двоичным файлом длиной менее 4 байтов.Что должно произойти в этом случае?

NB binary:at/2 работает на двоичных файлах , а не на цепочках битов, а смещение выражено в байтах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...