[erlang-questions] Missing binary BIFs

Robert Raschke rtrlists@REDACTED
Thu Feb 9 12:54:32 CET 2012


(erl@REDACTED)6> list_to_binary([1, [2], 3]).
<<1,2,3>>
(erl@REDACTED)7> binary_to_list(list_to_binary([1, [2], 3])).
[1,2,3]
(erl@REDACTED)8>

But I see you are using iolist, so you are probably not interested in
nested lists keeping their structure.

On Thu, Feb 9, 2012 at 11:51 AM, Loïc Hoguin <essen@REDACTED> wrote:

> Hm I would be very surprised if binary_to_list(list_to_binary(**L)) /= L
> wouldn't be true. Do you have an example of this?
>
>
> On 02/09/2012 12:48 PM, Robert Raschke wrote:
>
>> Sure, but don't you usually use them in pairs? Just wondering cause
>> list_to_binary/1 and binary_to_list/1 are not opposites of each other,
>> that is, binary_to_list(list_to_binary(**L)) /= L in general. But I'm
>> guessing that probably doesn't matter for your use case.
>>
>> On Thu, Feb 9, 2012 at 11:31 AM, Loïc Hoguin <essen@REDACTED
>> <mailto:essen@REDACTED>> wrote:
>>
>>    Those encode the term in the Erlang term format, which has a very
>>    particular purpose. The functions I'm talking about are just
>>    conversion from one type to binary strings.
>>
>>
>>    On 02/09/2012 12:29 PM, Robert Raschke wrote:
>>
>>        Are you guys sure you're not looking for term_to_binary/1 and
>>        binary_to_term/1 ?
>>
>>        On Thu, Feb 9, 2012 at 10:27 AM, Loďc Hoguin <essen@REDACTED
>>        <mailto:essen@REDACTED>
>>        <mailto:essen@REDACTED <mailto:essen@REDACTED>>> wrote:
>>
>>            While seemingly practical, I'm not sure why I would want any
>>        place
>>            in my code where I wouldn't be sure what the input type is.
>> Even
>>            with dialyzer checks I'm sure I would make false assumptions
>>        and get
>>            surprises here and there.
>>
>>            I also would like an efficient solution, both in processing
>>        speed
>>            and memory use. Converting to list then binary isn't that
>> great,
>>            even less so after module:function calls with guards.
>>
>>
>>            On 02/09/2012 09:03 AM, Rapsey wrote:
>>
>>                I wrote functions that convert between all types that I use
>>                constantly.
>>                Much easier to just force a specific type somewhere if
>>        you're
>>                not sure
>>                what the input type is going to be instead of doing checks
>>                everywhere or
>>                annoying conversions like the one you wrote.
>>                It has a dependency on mochinum:digits/1 though.
>>
>>                tolist(<<_/binary>> = P) ->
>>                binary_to_list(P);
>>                tolist(P) when is_atom(P) ->
>>                atom_to_list(P);
>>                tolist(P) when is_integer(P) ->
>>                integer_to_list(P);
>>                tolist(P) when is_float(P) ->
>>                mochinum:digits(P);
>>                tolist(P) when is_list(P) ->
>>                P.
>>
>>                tobin(<<_/binary>> = P) ->
>>                P;
>>                tobin(P) when is_list(P) ->
>>                iolist_to_binary(P);
>>                tobin(P) when is_atom(P) ->
>>                atom_to_binary(P,latin1);
>>                tobin(P) when is_integer(P) ->
>>                tobin(integer_to_list(P));
>>                tobin(P) when is_float(P) ->
>>                tobin(mochinum:digits(P)).
>>
>>                toatom(P) when is_binary(P) ->
>>                binary_to_atom(P,latin1);
>>                toatom(P) when is_list(P) ->
>>                list_to_atom(P);
>>                toatom(P) when is_atom(P) ->
>>                P.
>>                toint(<<_/binary>> = P) ->
>>                list_to_integer(binary_to_____**list(P));
>>
>>
>>                toint([_|_] = P) ->
>>                list_to_integer(P);
>>                toint(P) when is_integer(P) ->
>>                P;
>>                toint(P) when is_float(P) ->
>>                erlang:round(P).
>>                tofloat(P) when is_integer(P) ->
>>                P / 1;
>>                tofloat(P) when is_float(P) ->
>>                P;
>>                tofloat(P) when is_binary(P) ->
>>                tofloat(binary_to_list(P));
>>                tofloat(P) when is_list(P) ->
>>                Str = string:join(string:tokens(P,",**____"),"."),
>>
>>
>>                case string:str(Str,".") of
>>                0 ->
>>                tofloat(P ++ ".0");
>>                _ ->
>>                list_to_float(Str)
>>                end;
>>                tofloat(P) ->
>>                list_to_float(tolist(P)).
>>
>>
>>                On Wed, Feb 8, 2012 at 7:29 PM, Loďc Hoguin
>>        <essen@REDACTED <mailto:essen@REDACTED>
>>        <mailto:essen@REDACTED <mailto:essen@REDACTED>>
>>
>>        <mailto:essen@REDACTED <mailto:essen@REDACTED>
>>        <mailto:essen@REDACTED <mailto:essen@REDACTED>>>> wrote:
>>
>>                    Hello,
>>
>>                    It feels a bit tedious to keep doing things like
>>                      list_to_binary(integer_to_____**__list(42))
>>
>>                    or even
>>                      list_to_binary(atom_to_list(__**____forty_two))
>>
>>
>>
>>
>>                    when we could have convenient integer_to_binary/1 or
>>        /2 or
>>                    atom_to_list/1 BIFs.
>>
>>                    Is there any chance to add them in a future release?
>>        With
>>                all the
>>                    advantages of binaries it's a shame it's not easier
>>        to deal
>>                with them.
>>
>>                    Thanks.
>>
>>                    --
>>                    Loďc Hoguin
>>                    Erlang Cowboy
>>                    Nine Nines
>>                    ______________________________**
>> _______________________
>>
>>
>>                    erlang-questions mailing list
>>        erlang-questions@REDACTED <mailto:erlang-questions@**erlang.org<erlang-questions@REDACTED>
>> >
>>        <mailto:erlang-questions@REDACTED**ang.org <http://erlang.org>
>>        <mailto:erlang-questions@**erlang.org<erlang-questions@REDACTED>
>> >>
>>        <mailto:erlang-questions@
>>        <mailto:erlang-questions@>__er**l__ang.org <http://erl__ang.org> <
>> http://erlang.org>
>>        <mailto:erlang-questions@REDACTED**ang.org <http://erlang.org>
>>        <mailto:erlang-questions@**erlang.org<erlang-questions@REDACTED>
>> >>>
>>        http://erlang.org/mailman/____**__listinfo/erlang-questions<http://erlang.org/mailman/______listinfo/erlang-questions>
>>        <http://erlang.org/mailman/___**_listinfo/erlang-questions<http://erlang.org/mailman/____listinfo/erlang-questions>
>> >
>>
>>        <http://erlang.org/mailman/___**_listinfo/erlang-questions<http://erlang.org/mailman/____listinfo/erlang-questions>
>>        <http://erlang.org/mailman/__**listinfo/erlang-questions<http://erlang.org/mailman/__listinfo/erlang-questions>
>> >>
>>
>>        <http://erlang.org/mailman/___**_listinfo/erlang-questions<http://erlang.org/mailman/____listinfo/erlang-questions>
>>        <http://erlang.org/mailman/__**listinfo/erlang-questions<http://erlang.org/mailman/__listinfo/erlang-questions>
>> >
>>        <http://erlang.org/mailman/__**listinfo/erlang-questions<http://erlang.org/mailman/__listinfo/erlang-questions>
>>        <http://erlang.org/mailman/**listinfo/erlang-questions<http://erlang.org/mailman/listinfo/erlang-questions>
>> >>>
>>
>>
>>
>>
>>            --
>>            Loďc Hoguin
>>
>>            Erlang Cowboy
>>            Nine Nines
>>            ______________________________**_____________________
>>            erlang-questions mailing list
>>        erlang-questions@REDACTED <mailto:erlang-questions@**erlang.org<erlang-questions@REDACTED>
>> >
>>        <mailto:erlang-questions@REDACTED**ang.org <http://erlang.org>
>>        <mailto:erlang-questions@**erlang.org<erlang-questions@REDACTED>
>> >>
>>        http://erlang.org/mailman/____**listinfo/erlang-questions<http://erlang.org/mailman/____listinfo/erlang-questions>
>>        <http://erlang.org/mailman/__**listinfo/erlang-questions<http://erlang.org/mailman/__listinfo/erlang-questions>
>> >
>>        <http://erlang.org/mailman/__**listinfo/erlang-questions<http://erlang.org/mailman/__listinfo/erlang-questions>
>>        <http://erlang.org/mailman/**listinfo/erlang-questions<http://erlang.org/mailman/listinfo/erlang-questions>
>> >>
>>
>>
>>
>>
>>        ______________________________**___________________
>>        erlang-questions mailing list
>>        erlang-questions@REDACTED <mailto:erlang-questions@**erlang.org<erlang-questions@REDACTED>
>> >
>>        http://erlang.org/mailman/__**listinfo/erlang-questions<http://erlang.org/mailman/__listinfo/erlang-questions>
>>        <http://erlang.org/mailman/**listinfo/erlang-questions<http://erlang.org/mailman/listinfo/erlang-questions>
>> >
>>
>>
>>
>>    --
>>    Loďc Hoguin
>>    Erlang Cowboy
>>    Nine Nines
>>
>>
>>
>>
>> ______________________________**_________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/**listinfo/erlang-questions<http://erlang.org/mailman/listinfo/erlang-questions>
>>
>
>
> --
> Loïc Hoguin
> Erlang Cowboy
> Nine Nines
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120209/00f698f7/attachment.htm>


More information about the erlang-questions mailing list