2012-02-24 86 views
15

我有一個生成數據的erlang程序。這些數據需要通過udp傳輸到非Erlang程序進行進一步處理。我已經有這部分工作 - 通過udp發送數據並在另一個非erlang端接收數據。將erlang條件轉換爲字符串或解碼erlang二進制文件

這是問題所在。數據(像包含列表的元組這樣的erlang術語)似乎不能「按原樣」(即,我不能只發送任意的erlang術語)。它顯然需要首先轉換爲文本或二進制文件。轉換爲二進制似乎很容易與我發現的bif。問題是,二進制gobbledygook出現在另一邊,我不知道任何簡單的方法來解碼它(另一邊是非erlang)。

除非有人告訴我一些簡單的方法來二進制官樣文章的另一邊進行解碼,我想的要發送的數據爲條件的簡單字符串表示 - 例如一個元組是這樣的:

{[1,2,3],[4,5,6]} 

發送這樣的:

"{[1,2,3],[4,5,6]}" 

我還沒有看到任何這樣的BIF,即「convert_term_to_ascii/1」我知道我可以掃描併發送條款令牌交涉,但我不想等。要做到這一點 - 解碼在另一邊是我不想處理的痛苦用。

我知道我不是第一個,第二個或第三個有這個問題的人。它必須相當普遍。通常如何處理?

有人可以指點我一些資源,告訴我如何1)將二進制gobbledygook轉換爲ascii(在非erlang端需要),或2)直接將術語轉換爲字符串(在erlang端需要)?

或者,告訴我我是怎麼錯了,我該怎麼做呢?

謝謝。

回答

26

1)你可以使用

R= io_lib:format("~p",[yourtermhere]), 
lists:flatten(R) 

2)你可能看二郎外部二進制格式轉換的任何條款串,其他很多語言都庫編碼/解碼的是二郎神的二進制文件格式。而在erlang中,你可以通過term_to_binary對任何術語進行編碼

+0

剛剛遇到一個相關的問題,轉換一個二進制或字符串的形式,這將是有效的文件輸入:諮詢/ 1到Erlang的條款,但不是從一個文件開始。我決定爲未來的自我記錄解決方案,也許其他人會發現它有幫助:http://zxq9.com/archives/1354 – zxq9 2017-09-04 04:11:25

2

我建議將erlang條款轉換爲JSON,並使用已知的庫(聽說關於rfc4267的好話)。我想,將JSON轉換回任何非erlang平臺是一件簡單的任務。 )

+1

另一個值得關注的Erlang JSON庫是jsx--我將它用於所有Erlang服務器 - > C++客戶端,它的速度快,可靠且易於使用。 – Seb 2013-01-14 17:01:20

+0

在決定使用JSON之前,請記住Erlang和JSON類型之間沒有映射。特別是,JSON(和YAML)缺少原子,二進制數據的直接表示,以及字符串之間的區別(以及浮點數與整數之間的區別)。你必須選擇一箇中間格式或原理圖轉換來區分字符串和列表中的二進制文件,以及字符串中的原子,每個JSON庫都會有點不同。 BIFs'term_to_binary/1' <->'binary_to_term/1'是確切的,並且還可以用於各種語言的BERT庫(http://bert-rpc.org/)。 – zxq9 2017-09-04 01:43:10

相關問題