integer to binary

Bjorn Gustavsson <>
Fri Oct 7 14:44:02 CEST 2005


Actually, as Mattias Lang pointed out in a email to me, the guard test
is unecessary.

So here is a better version of the code, with a better name and validity
tests so that you'll know if you pass it values it isn't designed to handle:

unsigned_to_bin(I) when is_integer(I), I >= 0 ->
    unsigned_to_bin(I, []).

unsigned_to_bin(0, Acc) ->
    list_to_binary(Acc);
unsigned_to_bin(N, Acc) ->
    unsigned_to_bin(N bsr 8, [N band 16#ff|Acc]).

/Bjorn

Bjorn Gustavsson <> writes:

> It is actually easier not to use the bit syntax.
> For positive numbers the following function will do the trick:
> 
> int_to_bin(I) ->
>     int_to_bin(I, []).
> 
> int_to_bin(0, [B|Acc]) when B < 256 ->
>     list_to_binary([B|Acc]);
> int_to_bin(N, Acc) ->
>     int_to_bin(N bsr 8, [N band 16#ff|Acc]).
> 
> /Björn
> 
> chandru <> writes:
> 
> > Hi,
> > 
> > I want to convert an integer to a binary without having to
> > guess/figure-out how many bytes are required to fit that integer.
> > There doesn't seem to be a way to do this with the bit syntax.
> > 
> > 11> <<12345678901:40>>.
> > <<2,223,220,28,53>>
> > 
> > 12> <<12345678901:48>>.
> > <<0,2,223,220,28,53>>
> > 
> > In the example above, the integer will fit in 5 bytes but I can't
> > think of a way to specify this without trial and error. Any
> > suggestions? I can write a function which will figure out how many
> > bytes are required but it'll be nice to have a built-in way of doing
> > it.
> > 
> > cheers
> > Chandru
> > 
> 
> -- 
> Björn Gustavsson, Erlang/OTP, Ericsson AB
> 

-- 
Björn Gustavsson, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list