2015-05-14 40 views
0

我試圖找出如何將Erlang位串轉換爲元組,但迄今沒有任何運氣。將位串轉換爲元組

我想要的是從例如<<"{1,2}">>得到的元組{1,2}

回答

2

您可以使用模塊erl_scanerl_parse,如this answer中所述。由於erl_scan:string需要一個字符串,而不是二進制,你必須將價值與binary_to_list先轉換:

> {ok, Scanned, _} = erl_scan:string(binary_to_list(<<"{1,2}">>)). 
{ok,[{'{',1},{integer,1,1},{',',1},{integer,1,2},{'}',1}],1} 

然後,你會使用erl_parse:parse_term得到實際刑期。但是,此功能預計短期以點結束,所以我們必須明確地添加它:

> {ok, Parsed} = erl_parse:parse_term(Scanned ++ [{dot,0}]). 
{ok,{1,2}} 

現在變量Parsed包含結果:

> Parsed. 
{1,2} 
0

您可以使用二元函數和Erlang :list_to_tuple/1

1> B = <<"{1,2}">>. 
<<"{1,2}">> 
2> list_to_tuple([list_to_integer(binary_to_list(X)) || X <- binary:split(binary:part(B, 1, byte_size(B)-2), <<",">>, [global])]). 
{1,2}