[erlang-questions] Binary Parsing

Pete Stapley pstapley@REDACTED
Sat Mar 21 20:52:22 CET 2009

I am attempting to parse some Radius attributes with Erlang and I have 
run into a bit of a problem. I pass some binary data to parseAttributes 
and I want to start peeling off the attributes one by one. I first peel 
off Type which is one byte, then Length which is also one byte. Next I 
want to peel off the Attribute. The Length variable is the length of the 
attribute plus the Type and Length byte, so I have to subtract 2 bytes 
from the Length variable before peeling off the attribute. I have tried 
the method below without any luck. Is there a way to do this?


-define(BYTE, 8/unsigned-big-integer).

parseAttributes(Bin) ->
     parseAttributes(Bin, []).

parseAttributes(<<>>, Atts) ->
     {ok, Atts};
%%problem is here, Length - 2 does not seem to work
parseAttributes( <<Type:?BYTE, Length:?BYTE, Att:Length - 2/binary, 
Rest/binary>>, Atts) ->
     io:format("Type: ~p Length: ~p Att:~p Length: ~p~n", [Type, Length, 
Att, size(Rest)]),
     parseAttributes(Rest, Atts).

More information about the erlang-questions mailing list