[erlang-questions] Unexpected list_to_binary behavior
Valentin Micic
valentin@REDACTED
Tue Mar 18 15:15:57 CET 2014
Yes, you're right and this make sense at some level, particularly if the function I've called was
characters_to_binary/1.
Indeed, as Magnus Henoch mentioned in a related email, there is a function for conversion of unicode characters:
unicode:characters_to_binary/1;
So, why should the other one be called: list_to_binary/1 instead instead of characters_to_binary/1
If one disregard the existence of any previous knowledge, and given that a list may contain any number of arbitrary types, including a list itself, what should be a reasonable expectation for (and here's the kicker -- not an input argument itself, for it is perfectly acceptable to assume it to be a list, but) a content of the input argument?
It's surprising (at least was to me) to expect a content of an input argument ( formerly known as list ) to be limited to a list of octets, as much as it is surprising to see that integer_to_binary( 65536 ) results in <<"65536">> instead of <<255,255>>, that is, surprising to se that it behaves like a shortcut to list_to_binary( integer_to_list( 65536 )).
On the other hand, it is what it is, and, in a way, I am quite embarrassed that I assumed that integers would be automagically converted to appropriate number of octets, for this is just as unreasonable and arbitrary expectation.
Thank you for your responses.
Kind regards
V/
On 18 Mar 2014, at 3:19 PM, Steve Vinoski wrote:
>
>
>
> On Tue, Mar 18, 2014 at 9:13 AM, Valentin Micic <valentin@REDACTED> wrote:
> 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?
>
> This has nothing to do with the number of characters, but rather that you can't represent the value 256 in a byte:
>
> 1> list_to_binary([256]).
> ** exception error: bad argument
> in function list_to_binary/1
> called as list_to_binary([256])
>
> --steve
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140318/ba7c69ff/attachment.htm>
More information about the erlang-questions
mailing list