将字符串转换为二进制

时间:2012-06-08 11:05:45

标签: erlang

我有以下问题。 我有一个文件,用于存储一些记录(未知结构)的数组。我知道所有记录都以“。”分隔。 (点)。此记录的“字段”之一是二进制值。

所以结构是:

multiline_text <<binary_value>> multiline_text .

我可以读取chunk-by-chunk文件(因为它非常大)并解析数据以获取实际数据“&lt;&gt;”但它不是二进制值,而是字符串。我正在尝试将其转换为二进制(转换为术语迟到),但我没有成功。

我尝试使用BIF list_to_binary(但它不起作用,因为它不是列表) - 它已经是二进制文件了。我试图将它转换为整数列表,折叠它们并进行转换,它仍然无效。

我想我错过了一些基本的东西(我是Erlang的新手)。 有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如果你对这种格式的字符串感兴趣的二进制文件,例如:

S = "<< 1,2,3 >>".

然后你可以这样做:

> {ok, T, _} = erl_scan:string(S ++ ".").
> {ok, Term} = erl_parse:parse_term(T). 
{ok,<<1,2,3>>}

然后你可以使用Term,它实际上只是你读取的二进制文件字符串。

答案 1 :(得分:1)

这是没有erl_parse的版本。只是为了学习:

str2bin(Bin)->
Bin1 = string:strip(Bin, left, $<),
Bin2 = string:strip(Bin1, right, $>),
list_to_binary(lists:map(fun(Str) -> {Int, _Rest} = string:to_integer(string:strip(Str)), Int end, string:tokens(Bin2, ","))).