4

我需要編寫一個小工具來解析文本輸入並生成一些二進制編碼數據。我寧願遠離C等,以支持更高的水平,(可選)更安全,更富有表現力和更快地開發語言。適當的高級語言來處理二進制數據

我對這種任務選擇的語言通常是Python,但對於這種情況處理二進制原始數據可能會有問題,如果一個不小心與數字被晉升爲大數,簽署擴展和這樣。

理想情況下,我想有一個名爲位域是便攜以一致的方式被序列化的記錄。

(我知道,有在我已經掌握一門語言做一個支撐點,但它是不是最優的,但我認爲這可能是學習新東西的好機會)。

謝謝。

回答

4

奇怪的是,我認爲二郎可能適合該法案。忽略,除非你想使用它們,平行的設施,它有非常容易處理字符串的本地設施。根據術語位語法檢查文檔。

+0

好主意,我正在考慮學習Erlang,所以這可能是完美的:-D BTW,解析怎麼樣,它有體面的字符串處理或解析器生成器嗎? – fortran 2010-04-22 15:58:02

+1

引用Joe Armstrong的bo​​ol(如果你打算學習Erlang,這是非常寶貴的)「嚴格地說,Erlang中沒有字符串。字符串實際上只是整數列表。'從這我得出結論,它確實有體面的字符串處理,但你可以另外決定。至於解析器生成器,我不知道。 – 2010-04-22 16:15:27

3

我第二次投票給Erlang;儘管它很古怪,但它對二進制數據的位級控制具有出色的支持。 (因爲它必須;這是一個電信語言)另一個值得研究的語言是PADS,這是一種比較特殊用途的語言(也來自電信行業)專爲特設數據高速處理。我相信PADS支持二進制數據,但我不能發誓。

2

如果你想留在Python中的一個選項是bitstring模塊,它最需要處理二進制數據的痛苦了。

構造和解析任意二進制結構非常簡單,所以如果Erlang不適合你,可能值得一看!

0

IMP,僅使用您已知的語言會更快。除非你想爲了樂趣而學習一些新的語言。

0

C的結構是主流了這樣的事情之一。如果您不喜歡其他語言,您可以使用C語言定義數據格式,並使用Python定義所有的訪問代碼,並用SWIG填補差距。我沒有太多使用SWIG,所以我不知道你能做多少工作。如果你不能在Python中完成所有的代碼,你可以在C語言中使用一些比特(WriteStructToFile等),因爲它們可以非常小且明確定義。

+0

這並不能解決序列化格式的可移植性問題,我仍然需要爲自己編寫代碼以確保它的處理正確(這正是我試圖避免的)。 – fortran 2010-11-03 08:55:28

+0

@fortran:IIRC有一定數量的文件格式或多或少定義爲C結構。如果強制對齊爲1,我認爲這不會給編譯器太多(任何?)的空間來混淆佈局。 OTOH我似乎記得在位域上做這件事存在問題。 – BCS 2010-11-03 13:57:02

2

對於這類低級數據表示形式,Ada對您所描述的這種低級數據表示形式提供了很大支持,其格式爲表示子句表示數據類型。例如見

http://www.adaic.org/standards/05rm/html/RM-13-5-1.html

隨着表示子句也可以定義確切的佈局和走線(如果需要)爲您的所有數據,在便攜時尚。類似地,例如出於性能目的而改變表示是非常容易的,例如,使用存儲爲位對機器可尋址單詞的布爾值。