Erlang二进制优化已知整数

时间:2012-05-16 03:41:23

标签: optimization binary erlang integer

可以进一步优化:

Binary = <<"2345", 1, "restofmessageexistshere">>





get_integer_value(Binary) ->
    [Num, _, LastRest] = integer_value(Binary),
    [Num, LastRest].

integer_value(<<1, _Rest/binary>>) ->  [0, 1, _Rest];
integer_value(<<H:8, Rest/binary>>) ->
    % io:format("~n~p~n", [Rest]),
    [Num, Exp, LastRest] = integer_value(Rest),
    [(H-48)*Exp + Num, Exp*10, LastRest].



Expected Result ->  [2345, "restofmessageexistshere"]

1 个答案:

答案 0 :(得分:0)

您可以使用以下功能:

integer_value(Bin) ->
    integer_value(Bin, 0).

integer_value(<<Char, Tail/binary>>, Acc) when (Char >= $0) and (Char =< $9) ->
    integer_value(Tail, Acc * 10 + (Char - $0));
integer_value(<<1, Tail/binary>>, Acc) ->
    [Acc, Tail];
integer_value(Bin, _Acc) ->
    %% Throw an exception if the argument is not in the correct format
    erlang:error(badarg, [Bin]).

如果您致电integer_value(<<"2345", 1, "restofmessageexistshere">>),您将获得[2345, "restofmessageexistshere"]

此功能可以解决您的问题,但正如之前的海报所说,您可能想要解释您想要做什么,以确保这是解决您问题的最佳方案。