我正在尝试找出如何将Erlang位串转换为元组,但到目前为止没有任何运气。
我想要的是例如<<"{1,2}">>
元组{1,2}
。
答案 0 :(得分:2)
您可以像this answer一样使用模块erl_scan
和erl_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}