Я пытаюсь переместить некоторые данные между программой Elixir и программой C. В Elixir у меня есть структура вещей, которую я хочу перенести. Я использую :erlang.term_to_binary
, чтобы преобразовать его в двоичный файл, который затем я sh превращаю в C.
Однако, когда я декодирую его, он просто возвращает NULL
?? И там нет сообщения об ошибке или что-нибудь. Куча других терминов эликсир / эрланг работает нормально; в частности, происходит сбой, когда я пытаюсь отправить по карте или структуре (это тип карты).
Я делаю что-то подобное в Elixir:
msg = %Message{ title: "hello", body: "world" }
binmsg = :erlang.term_to_binary(msg)
send(state.port, {self(), {:command, binmsg}})
.. и в C (исключая получение сообщения, которое, как я подтвердил, пришло с правильной длиной, и даже подтвердило, что байты идентичны в C и эликсире):
uint8_t *buf = read_cmd();
ETERM *map = erl_decode(buf);
erl_print_term(map, stdout);