将位串转换为元组

Convert bitstring to tuple

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

我想要的是从例如 <<"{1,2}">> 元组 {1,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}

您可以使用二进制函数和 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}