我有以下问题。 我有一个文件,用于存储一些记录(未知结构)的数组。我知道所有记录都以“。”分隔。 (点)。此记录的“字段”之一是二进制值。
所以结构是:
multiline_text <<binary_value>> multiline_text .
我可以读取chunk-by-chunk文件(因为它非常大)并解析数据以获取实际数据“&lt;&gt;”但它不是二进制值,而是字符串。我正在尝试将其转换为二进制(转换为术语迟到),但我没有成功。
我尝试使用BIF list_to_binary
(但它不起作用,因为它不是列表) - 它已经是二进制文件了。我试图将它转换为整数列表,折叠它们并进行转换,它仍然无效。
我想我错过了一些基本的东西(我是Erlang的新手)。 有什么建议吗?
答案 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, ","))).