[erlang-questions] using variable in bit syntax
Gaspar Chilingarov
nm@REDACTED
Sat Jul 14 09:01:23 CEST 2007
Haobo Yu wrote:
> Hi,
>
> I'm rather new to erlang, so please pardon my ignorance.
>
> I'm trying to parse a packet header using the bit syntax. There is a
> byte in the header that indicates the endianness of the subsequent
> integers in the packet header. For example:
>
> endianness : 8/unsigned-integer
> %% The following integers follow the above endianness
> value1 : 32/integer
> value2 : 32/integer
> ...
>
> Because the endianness is specified in the bit syntax, such as
> unsigned-little-integer, it would be nice to encode the endianness in
> a variable when I parse that byte, then use this variable to parse
> the following integers in the packet header. I would like to have
> something like this:
>
> if Endianness == 1 ->
> Spec = "32/little-integer";
> true ->
> Spec = "32/big-integer";
> end,
> <<Value1:Spec, Value2:Spec>> = Header,
>
> However, putting a variable in the place of bit type specifier does
> not seem to work. I can't put a BIF, such as list_to_atom, there
> either.
>
> Any suggestions whether and how this might be done?
>
The most straightforward method is something like this :)
if Endianness == 1 ->
<<Value1:32/little-integer, Value2:32/little-integer>> = Header;
true ->
<<Value1:32/big-integer, Value2:32/big-integer>> = Header;
end,
:)
In other hand you can construct string and then
transform it to erlang code, see
http://www.erlang.org/pipermail/erlang-questions/2005-April/015274.html
This will allow you construct fun before parsing data, and them apply
that fun on each packet.
--
Gaspar Chilingarov
System Administrator,
Network security consulting
t +37493 419763 (mob)
i 63174784
e nm@REDACTED
w http://zanazan.am/
More information about the erlang-questions
mailing list