construct binary
Matthias Lang
matthias@REDACTED
Thu Jul 7 08:54:43 CEST 2005
Here's my try:
decode(<<N_channels:5, Alignment_bits:3, Tail/binary>>) ->
decode2(N_channels, <<Alignment_bits:3, Tail/binary, 0:5>>).
decode2(0, _) ->
[];
decode2(N, <<C:11, A:5, T/binary>>) ->
[C|decode2(N-1, <<A:5, T/binary, 0:3>>)].
encode(Channels) when length(Channels) < 32 ->
encode2(<<(length(Channels)):5, 0:3>>, 5, 3, Channels).
encode2(Bin, _Used, _Pad, []) ->
Bin;
encode2(Bin, Bits, Pad, [C|Cs]) when C >= 0, C < 2048 ->
<<Head:Bits, _:Pad>> = Bin,
New_pad = (Pad - 11) band 7,
encode2(<<Head:Bits, C:11, 0:New_pad>>, Bits + 11, New_pad, Cs).
Matthias
--------------------
Vance Shipley writes:
> Stephen,
>
> I think this does it.
>
> -Vance
>
>
> 1> prl:decode(<<2:5, 1:11, 2:11, 0:5>>).
> [1,2]
>
>
> -module(prl).
> -export([decode/1]).
>
> decode(<<NumChans:5, _Pad:3, _Rest/binary>> = Bin) ->
> decode(Bin, NumChans, NumChans, []).
> decode(_, _, 0, Acc) ->
> Acc;
> decode(Bin, NumChans, N, Acc) ->
> SkipBefore = (N - 1) * 11,
> SkipAfter = (NumChans - N) * 11,
> Pad = 8 - ((NumChans * 11 + 5) rem 8),
> <<_:5, _:SkipBefore, Chan:11, _:SkipAfter, _:Pad>> = Bin,
> decode(Bin, NumChans, N - 1, [Chan | Acc]).
>
>
> On Wed, Jul 06, 2005 at 04:59:47PM -0700, Stephen Han wrote:
> }
> } I am trying to write a IS-683 PRL encode/decode tool for our testing.
More information about the erlang-questions
mailing list