可以进一步优化:
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"]
答案 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"]
。
此功能可以解决您的问题,但正如之前的海报所说,您可能想要解释您想要做什么,以确保这是解决您问题的最佳方案。