将位串转换为元组
Convert bitstring to tuple
我正在尝试找出如何将 Erlang 位串转换为元组,但到目前为止还没有成功。
我想要的是从例如 <<"{1,2}">>
元组 {1,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}
您可以使用二进制函数和 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}
我正在尝试找出如何将 Erlang 位串转换为元组,但到目前为止还没有成功。
我想要的是从例如 <<"{1,2}">>
元组 {1,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}
您可以使用二进制函数和 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}