Строковое представление числа может быть преобразовано с помощью N-48. Для многозначных чисел вы можете сложить двоичное число, умножив на степень положения цифры:
-spec to_int(binary()) -> integer().
to_int(Bin) when is_binary(Bin) ->
to_int(Bin, {size(Bin), 0}).
to_int(_, {0, Acc}) ->
erlang:trunc(Acc);
to_int(<<N/integer, Tail/binary>>, {Pos, Acc}) when N >= 48, N =< 57 ->
to_int(Tail, {Pos-1, Acc + ((N-48) * math:pow(10, Pos-1))}).
Производительность при этом примерно в 100 раз ниже, чем при использовании опции list_to_integer(binary_to_list(X))
.