在erlang中编码/解码XDR类型的推荐方法是什么?

在erlang中编码/解码XDR类型的推荐方法是什么?,erlang,network-programming,externalinterface,Erlang,Network Programming,Externalinterface,在另一个SO讨论中,我们讨论了如何将一个erlang应用程序连接到另一个正在使用的非erlang应用程序 不幸的是,在使用erlang处理XDR数据时,我找不到任何真正的指针 那么,在erlang中处理XDR编码数据的推荐方法是什么 谢谢 PS:到目前为止,我可以找到以下资源: (2002年,PDF,仅简短提及XDR) (2000年,这里也没有相关内容,但仍然是一本有趣的读物) ,它是相关的,并提供了一些XDR例程,但它是从08/2000开始的,因此甚至早于erlang对bits语法的支持 构

在另一个SO讨论中,我们讨论了如何将一个erlang应用程序连接到另一个正在使用的非erlang应用程序

不幸的是,在使用erlang处理XDR数据时,我找不到任何真正的指针

那么,在erlang中处理XDR编码数据的推荐方法是什么

谢谢

PS:到目前为止,我可以找到以下资源:

  • (2002年,PDF,仅简短提及XDR)

  • (2000年,这里也没有相关内容,但仍然是一本有趣的读物)

  • ,它是相关的,并提供了一些XDR例程,但它是从08/2000开始的,因此甚至早于erlang对bits语法的支持


构建自己的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 push_bool(bool())->binary()
推送布尔(值)->
案例价值
正确->
;
错误->
结束。
另一种方式会更加冗长,这取决于您希望如何完成错误报告。我选择了例外情况:

%% @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}.
%%@spec pull_bool(binary())->{bool(),binary()}
拉布尔(垃圾箱)->
{Value,Tail}=
尝试
=Bin,
{V,T}
抓住
错误:{badmatch,{}->
抛出({xdr_错误,“无效布尔值”})
完,,
结果=的案例值
0->false;
1->正确;
_->抛出({xdr_错误,“无效布尔值”})
完,,
{Result,Tail}。

实际上,XDR数据类型总共并不多,所以总共可能只有几百行代码

在Erlang源集合中有一个名为的项目。它有一个代码生成器,生成Erlang代码来管理基于XDR的协议。

+1。目前正在学习Erlang.:)感谢您的回复,正如在最初的帖子中所提到的,我意识到了复杂性,并且从2000年起就有一个XDR库的完整实现:我只是想问一下今天推荐的/标准的可靠实现方法。