2

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

所以结构是:

multiline_text <<binary_value>> multiline_text .

我可以逐块读取文件(因为它非常大)并解析数据以获取实际数据“<>”,但它不是二进制值,而是字符串。我正在尝试将其转换为二进制(以转换为后期),但我没有成功。

我尝试使用 BIF list_to_binary(但它不会工作,因为它不是一个列表)——它已经是一个二进制文件。我试图将其转换为整数列表,将它们折叠并转换,但它仍然无法正常工作。

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

4

2 回答 2

2

如果您以这种格式将您感兴趣的二进制文件转换为字符串,例如:

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

然后你可以做这样的事情:

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

然后您可以使用Term, 它实际上将您刚刚读取的二进制文件作为字符串读取。

于 2012-06-08T11:50:47.077 回答
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, ","))).
于 2012-06-08T12:11:29.707 回答