Преобразование терминов erlang в строку или декодирование erlang binary
У меня есть программа erlang, которая генерирует данные. Эти данные должны быть переданы через udp в программу non-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" и т.д. Я знаю, что могу сканировать его и отправлять представления токенов, но я не хочу этого делать - декодирование с другой стороны это просто боль, с которой я не хочу иметь дело.
Я знаю, что я не первый, второй или третий человек, чтобы иметь эту проблему. Это должно быть довольно распространенным явлением. Как обычно это делается?
Может ли кто-нибудь указать мне на какой-то ресурс, показывающий мне, как либо: 1) преобразовать двоичный gobbledygook в ascii (необходимо на стороне неэрланга) или 2) прямо преобразовать термины в строку (необходимо на стороне erlang)?
Или, скажите мне, как я ошибаюсь и как я должен действительно это делать?
Спасибо.
Ответы
Ответ 1
1) вы можете преобразовать любой термин в строку, используя
R= io_lib:format("~p",[yourtermhere]),
lists:flatten(R)
2) вы можете посмотреть внешний двоичный формат erlang, у многих других языков есть библиотеки для кодирования/декодирования этого формата erlang двоичных файлов. И в erlang вы можете кодировать любой термин term_to_binary
Ответ 2
Я бы рекомендовал преобразовать термины erlang в JSON с одной из известных библиотек (слышал хорошие слова относительно rfc4267). Думаю, было бы тривиальной задачей конвертировать JSON с любой платформой, отличной от erlang. )