web-dev-qa-db-ja.com

erlang用語を文字列に変換するか、erlangバイナリをデコードします

データを生成するアーランプログラムがあります。このデータは、さらに処理するためにudpを介して非erlangプログラムに転送する必要があります。私はすでにこの部分を機能させています-udpを介してデータを送信し、erlang以外の側でデータを受信します。

これが問題です。データ(リストを含むタプルのようなerlang用語)は「そのまま」では渡れないようです(つまり、任意のerlang用語を送信することはできません)。どうやら最初にテキストまたはバイナリに変換する必要があります。私が見つけたbifを使えば、バイナリへの変換は簡単に思えます。問題は、バイナリのgobbledygookが反対側に出てきて、それをデコードする簡単な方法がわからないことです(反対側は非erlangです)。

誰かが反対側のバイナリgobbledygookをデコードする簡単な方法を教えてくれない限り、データを用語の単純な文字列表現として送信したいと思います。たとえば、次のようなタプルです。

{[1,2,3],[4,5,6]}

このように送信されます:

"{[1,2,3],[4,5,6]}"

「convert_term_to_ascii/1」などのようなbifは見たことがありません。スキャンして用語のトークン表現を送信できることはわかっていますが、それはしたくありません。反対側でデコードするだけです。対処したくない痛み。

私はこの問題を抱えている最初、2番目、または3番目の人ではないことを知っています。それはかなり一般的でなければなりません。通常はどのように扱われますか?

1)バイナリのgobbledygookをasciiに変換する方法(非erlang側で必要)、または2)用語を文字列に直接変換する方法(erlang側で必要)を示すリソースを誰かに教えてもらえますか?

または、私がどのように間違っているのか、そして実際にこれをどのように行うべきかを教えてください。

ありがとう。

22
X Z

1)を使用して任意の用語を文字列に変換できます

R= io_lib:format("~p",[yourtermhere]),
lists:flatten(R)

2)erlang外部バイナリフォーマットを見るかもしれませんが、他の多くの言語には、erlangバイナリフォーマットをエンコード/デコードするためのライブラリがあります。そしてerlangではterm_to_binaryで任意の用語をエンコードできます

35

既知のライブラリのいずれかを使用して、erlang用語をJSONに変換することをお勧めします( rfc4267 に関する良い言葉を聞いた)。 erlang以外のプラットフォームでJSONを変換するのは簡単な作業だと思います。 )

3
raina77ow