将erlang术语转换为字符串,或解码erlang二进制文件

时间:2012-02-24 00:10:33

标签: erlang

我有一个生成数据的erlang程序。需要将此数据通过udp传输到非erlang程序以进行进一步处理。我已经有了这个部分 - 通过udp发送数据并在另一个非erlang端接收它。

这就是问题所在。数据(像包含列表的元组一样的erlang术语)似乎无法越过""" (即我不能发送任意的erlang术语)。显然需要先将其转换为文本或二进制文件。转换为二进制似乎很容易,我发现bif。问题是,二进制gobbledygook出现在另一边,我不知道任何简单的解码方法(另一方面是非erlang)。

除非有人告诉我另一方面解码二进制gobbledygook的简单方法,我希望将数据作为术语的简单字符串表示形式发送 - 例如像这样的元组:

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

像这样发送:

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

我还没有看到任何这样的bif,即" convert_term_to_ascii / 1"我知道我可以扫描它并发送条款的令牌表示,但我不想这样做 - 解码另一方面只是一个我不想处理的痛苦。 / p>

我知道我不是第一个,第二个或第三个有这个问题的人。它必须相当普遍。通常如何处理?

有人能指点我一些资源向我展示如何1)将二进制gobbledygook转换为ascii(在非erlang方面需要),或者2)直接将术语转换为字符串(在erlang端需要)? / p>

或者,告诉我我的错误以及我应该如何做到这一点?

感谢。

2 个答案:

答案 0 :(得分:32)

1)您可以使用

将任何术语转换为字符串
R= io_lib:format("~p",[yourtermhere]),
lists:flatten(R)

2)你可能会看一下erlang外部二进制格式,很多其他语言都有用于编码/解码的erlang二进制格式库。在erlang中,您可以通过term_to_binary对任何术语进行编码

答案 1 :(得分:3)

我建议将erlang术语转换为JSON,使用任何已知的库(听到关于rfc4267的好词)。我想,将JSON转换回任何非erlang平台是一项微不足道的任务。 )