2009-05-22 54 views
2

在另一個SO討論中,我們正在討論將erlang應用程序與另一個使用XDR encoded packets for network communications的非erlang應用程序進行接口。在erlang中編碼/解碼XDR類型的推薦方法是什麼?

不幸的是,我無法真正發現使用erlang處理XDR數據的真正指針。

那麼在erlang中處理XDR編碼數據的推薦方式是什麼?

感謝

PS:到目前爲止,我可以找到以下資源:

+0

+1。目前正在學習Erlang。 :) – 2009-05-22 19:00:26

回答

0

構建您自己的XDR編碼和解碼庫並不困難。

編碼二郎方面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數據類型,所以它可能總共有幾百行代碼。

+0

感謝您的回覆,正如在原始發佈中提到的,我意識到了複雜性,並且從2000年開始可以完全實現XDR庫:http://erlang.org/pipermail/erlang-questions/ 2000年8月/ 001543.html我只是問今天可靠地做到這一點的推薦/標準方式。 – none 2009-05-30 10:02:35

1

在Erlang源集合0123'中有一個名爲rpc的項目。它有一個生成Erlang代碼的代碼生成器來管理基於XDR的協議。

相關問題