将bitstring转换为元组

时间:2015-05-14 16:28:29

标签: binary erlang

我正在尝试找出如何将Erlang位串转换为元组,但到目前为止没有任何运气。

我想要的是例如<<"{1,2}">>元组{1,2}

2 个答案:

答案 0 :(得分:2)

您可以像this answer一样使用模块erl_scanerl_parse。由于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}

答案 1 :(得分: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}