[erlang-questions] Missing binary BIFs

Robert Raschke <>
Thu Feb 9 12:29:32 CET 2012


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 <> 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 <
>> <mailto:>> 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
>>     <mailto:erlang-questions@**erlang.org<>
>> >
>>    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
> 
> http://erlang.org/mailman/**listinfo/erlang-questions<http://erlang.org/mailman/listinfo/erlang-questions>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120209/c9cfb247/attachment.html>


More information about the erlang-questions mailing list