2012-05-16 61 views
-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"] 
+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"]

這個功能解決了你的問題,但正如前面的海報所說,你可能想解釋你想做什麼來確保這是你的問題的最佳解決方案。

+0

它在描述發生的事情上也更清晰一些。 – rvirding