2

次の問題があります。いくつかのレコードの配列(不明な構造)を格納するために使用されるファイルがあります。すべてのレコードが「。」で区切られていることを私は知っています。(ドット)。このレコードの「フィールド」の1つは、バイナリ値です。

したがって、構造は次のとおりです。

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 に答える