<div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Apr 30, 2012 at 10:54 AM, Max Lapshin <span dir="ltr"><<a href="mailto:max.lapshin@gmail.com" target="_blank">max.lapshin@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">> defined in a macro) and there is an unnecessary conversion cost to list<br>
> (although the cost is small since both binary and list are likely small).<br>
><br>
<br>
</div>Cost is not so small, because NIF binary_to_integer will create only<br>
one object, when list_to_integer(binary_to_list()) will create many of<br>
them. It is very important when you need to import LOTS of numbers<br>
(read about my CSV parsing).<br></blockquote><div><br></div><div>I suppose you could implement it in pure erlang without creating any intermediate lists, maybe it's even fast with HIPE. Floats are likely another story.</div>
<div><br></div><div><div>binary_to_integer(B=(<<_N, _/binary>>)) -></div><div>    binary_to_integer(B, 0).</div><div><br></div><div>binary_to_integer(<<N, Rest/binary>>, Acc) when N >= $0 andalso N =< $9 -></div>
<div>    binary_to_integer(Rest, (N - $0) + (Acc * 10));</div><div>binary_to_integer(<<>>, Acc) -></div><div>    Acc.</div></div><div><br></div><div>-bob</div><div><br></div></div></div>