Serialization 为什么在反序列化长生不老药映射时,`erl_decode`返回NULL?
我试图在Elixir程序和C程序之间移动一些数据。在《长生不老药》中,我有一个我想改变的结构。我使用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
: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);