[erlang-questions] Unexpected list_to_binary behavior

Magnus Henoch magnus@REDACTED
Tue Mar 18 14:24:15 CET 2014


Valentin Micic <valentin@REDACTED> writes:

> Hi all,
>
> (my apologies if this has been covered already)
>
> Is there any reason why:
>
> (twist@REDACTED)820> list_to_binary( lists:seq(1,255) ).
> <<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,
>   22,23,24,25,26,27,28,29,…>>
>
> works, but 
>
> (twist@REDACTED)821> list_to_binary( lists:seq(1,256) ).
> ** exception error: bad argument
>      in function  list_to_binary/1
>         called as list_to_binary([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
>                                   23,24,25,26,27,28|…])
>
> breaks on Erlang 16B02? Was the limit to 255 characters for list_to_binary/1 always there and I just failed to see it before?

The problem is not the length of the list, but the values in it:

2> list_to_binary(lists:duplicate(256, 1)).
<<1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,...>>

list_to_binary just takes a list of byte values (0 =< n =< 255) and puts
them into a binary.  (If you want to convert Unicode codepoints, which
may be greater than 255, you could use unicode:characters_to_binary/1.)

Regards,
Magnus



More information about the erlang-questions mailing list