2012-05-16 45 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