-1

これをさらに最適化できますか:

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"]
4

1 に答える 1

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"]

この関数は問題を解決しますが、前の投稿者が言ったように、これが問題の最善の解決策であることを確認するために何をしたいのかを説明したい場合があります.

于 2012-05-16T12:17:23.983 に答える