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

随着表示子句也可以定义确切的布局和走线(如果需要)为您的所有数据,在便携时尚。类似地,例如出于性能目的而改变表示是非常容易的,例如,使用存储为位对机器可寻址单词的布尔值。