在另一个SO讨论中,我们讨论的是将erlang应用程序连接到另一个使用XDR encoded packets for network communications的非erlang应用程序。
不幸的是,我真的找不到使用erlang处理XDR数据的任何实际指示。
那么在erlang中处理XDR编码数据的推荐方法是什么?
由于
PS:到目前为止,我可以找到以下资源:Getting Erlang to talk to the outside world(2002,PDF,仅提及XDR)
Sendmail Meets Erlang: Experiences Using Erlang for Email Applications(2000,这里也没什么关系,但仍然是一个有趣的读物)
And then there's this posting,它是相关的,提供了一些XDR例程,但是从08/2000开始,所以甚至早于erlang对比特语法的支持。
答案 0 :(得分:1)
答案 1 :(得分:0)
构建自己的XDR编码和解码库并不困难。
将Erlang术语编码到XDR是微不足道的:
%% @spec push_bool(bool()) -> binary()
push_bool(Value) ->
case Value of
true ->
<<0, 0, 0, 1>>;
false ->
<<0, 0, 0, 0>>
end.
另一种方式是更加冗长,具体取决于您希望如何进行错误报告。我选择了例外:
%% @spec pull_bool(binary()) -> {bool(), binary()}
pull_bool(Bin) ->
{Value, Tail} =
try
<<0, 0, 0, V, T/binary>> = Bin,
{V, T}
catch
error:{badmatch, _} ->
throw({xdr_error, "Invalid boolean value"})
end,
Result = case Value of
0 -> false;
1 -> true;
_ -> throw({xdr_error, "Invalid boolean value"})
end,
{Result, Tail}.
总共没有那么多的XDR数据类型,所以它总共可能是几百行代码。