Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serialization 为什么在反序列化长生不老药映射时,`erl_decode`返回NULL?_Serialization_Erlang_Elixir - Fatal编程技术网

Serialization 为什么在反序列化长生不老药映射时,`erl_decode`返回NULL?

Serialization 为什么在反序列化长生不老药映射时,`erl_decode`返回NULL?,serialization,erlang,elixir,Serialization,Erlang,Elixir,我试图在Elixir程序和C程序之间移动一些数据。在《长生不老药》中,我有一个我想改变的结构。我使用:erlang.term_to_binary将其转换为二进制,然后将其转换为C 但是,当我解码它时,它只返回NULL??而且没有错误信息或任何东西。其他一些长生不老药/erlang术语也很管用;当我试图通过映射或结构(这是一种映射类型)发送时,它特别失败 我在《长生不老药》中这样做: msg = %Message{ title: "hello", body: "world" } binms

我试图在Elixir程序和C程序之间移动一些数据。在《长生不老药》中,我有一个我想改变的结构。我使用
:erlang.term_to_binary
将其转换为二进制,然后将其转换为C

但是,当我解码它时,它只返回
NULL
??而且没有错误信息或任何东西。其他一些长生不老药/erlang术语也很管用;当我试图通过映射或结构(这是一种映射类型)发送时,它特别失败

我在《长生不老药》中这样做:

  msg = %Message{ title: "hello", body: "world" }
  binmsg = :erlang.term_to_binary(msg)
  send(state.port, {self(), {:command, binmsg}})
。。在C语言中(不包括消息的接收,我已经确认消息的长度是正确的,甚至确认C和elixir中的字节是相同的):

它似乎不支持反序列化映射。地图从Erlang/OTP 17开始,但是在
erl\u marshal.c
中没有提到地图扩展

这可能是因为
erl_marshal
是hella的遗产,自Erlang/OTP 22以来就一直被弃用。请改用
ei\u decode.*
函数系列!甚至还有一个。这应该行得通

  uint8_t *buf = read_cmd();
  ETERM *map = erl_decode(buf);
  erl_print_term(map, stdout);