Преобразовать термины Эрланга в строку или расшифровать двоичный файл Эрланга - PullRequest
21 голосов
/ 24 февраля 2012

У меня есть программа erlang, которая генерирует данные. Эти данные должны быть переданы через UDP в не-Erlang программу для дальнейшей обработки. У меня уже есть эта часть работы - отправка данных через udp и получение их с другой стороны, не относящейся к эрлангу.

Вот проблема. Похоже, что данные (термины эрланга, такие как кортежи, содержащие списки) не могут пройти «как есть» (то есть я не могу просто отправить произвольные термины эрланга). По-видимому, сначала его необходимо преобразовать в текстовый или двоичный файл. Преобразование в двоичный файл кажется достаточно простым с BIF я нашел. Проблема в том, что с другой стороны выходит двоичный gobbledygook, и я не знаю никакого простого способа его расшифровать (другая сторона не-erlang).

Если кто-то скажет мне простой способ декодирования двоичного гоблида с другой стороны, я бы хотел, чтобы данные отправлялись в виде упрощенного строкового представления терминов - например, кортежа, подобного этому:

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

отправлено так:

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

Я не видел ни одного такого bif, то есть "convert_term_to_ascii / 1" и т. Д. Я знаю, что мог бы отсканировать его и отправить токен-представления терминов, но я не хочу этого делать - декодировать это на другой стороне. это просто боль, с которой я не хочу иметь дело.

Я знаю, что я не первый, второй или третий человек, который имеет эту проблему. Это должно быть довольно распространенным явлением. Как с этим обычно справляются?

Может ли кто-нибудь указать мне на какой-нибудь ресурс, показывающий мне, как 1) преобразовать двоичный gobbledygook в ascii (требуется на стороне, отличной от erlang), или 2) просто преобразовать термины в строку (необходимо на стороне erlang)?

Или, скажите мне, как я ошибаюсь и как я должен это делать?

Спасибо.

Ответы [ 2 ]

32 голосов
/ 24 февраля 2012

1) вы можете преобразовать любой термин в строку, используя

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

2) вы можете взглянуть на внешний двоичный формат erlang, во многих других языках есть библиотеки для кодирования / декодирования этого двоичного формата erlang.А в erlang вы можете закодировать любой термин по term_to_binary

3 голосов
/ 24 февраля 2012

Я бы рекомендовал преобразовать термины erlang в JSON с любой из известных библиотек (слышал хорошие слова относительно rfc4267 ).Думаю, было бы тривиальной задачей преобразовать JSON обратно на любую платформу, отличную от Erlang.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...