Ха-ха - написано уже в нашей кодовой базе - примерно в 3 разных раза: (
%% @doc Convert an string to a decimal integer
%% @spec b26_to_i(string()) -> integer()
b26_to_i(List) when is_list(List) ->
b26_to_i(string:to_lower(lists:reverse(List)),0,0).
%% private functions
b26_to_i([], _Power, Value) ->
Value;
b26_to_i([H|T],Power,Value)->
NewValue = case (H > 96) andalso (H < 123) of
true ->
round((H - 96) * math:pow(26, Power));
_ ->
exit([H | T] ++ " is not a valid base 26 number")
end,
b26_to_i(T, Power + 1, NewValue + Value).
Загадка заключается в том, что на самом деле это не представление числа в Base26 (мы лжем себе в названии нашей функции здесь), потому что в нем нет нуля.
Последовательность:
A, B, C ... Z, AA, AB, AC
а не:
A, B, C ... Z, BA, BB, BC
(язык Erlang, mais oui).