适当的高级语言来处理二进制数据

时间:2010-04-22 15:43:55

标签: parsing programming-languages encoding binary language-features

我需要编写一个小工具来解析文本输入并生成一些二进制编码数据。我宁愿远离C等,更倾向于更高层次,(可选)更安全,更具表现力,更快速地开发语言。

我对这类任务的选择语言通常是Python,但是对于这种情况,如果对提升为bignums,符号扩展等的数字不太谨慎,处理二进制原始数据可能会有问题。

理想情况下,我希望记录具有可移植的命名位域,以便以一致的方式进行序列化。

(我知道用我已经掌握的语言来做这一点非常有意义,虽然它不是最佳的,但我认为这可能是学习新知识的好机会。)

感谢。

6 个答案:

答案 0 :(得分:4)

奇怪的是,我认为 Erlang 可能符合要求。忽略,除非您想使用它们,并行设施,它具有非常容易处理字符串的原生设施。检查术语位语法下的文档。

答案 1 :(得分:3)

我对Erlang投了第二票;尽管它很奇怪,但它对二进制数据的位级控制有很好的支持。 (因为它必须;它是一种电信语言。)另一种值得研究的语言是PADS,它是一种更专用的语言(也来自电信行业),专为 ad hoc的高速处理而设计数据。我相信PADS支持二进制数据,但我不能发誓。

答案 2 :(得分:2)

如果你想留在Python中,一个选项就是bitstring模块,它消除了处理二进制数据的大部分痛苦。

构造和解析任意二进制结构非常简单,所以如果Erlang不适合你,可能值得一看!

答案 3 :(得分:2)

对于数据类型的表示子句,Ada非常支持您所描述的此类低级数据表示。参见例如

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

使用表示子句,可以以便携方式为所有数据定义确切的布局和对齐(如果需要)。类似地,例如出于性能目的,例如为了性能目的而改变表示非常容易。使用布尔值存储为位与机器可寻址的单词。

答案 4 :(得分:0)

IMP,只使用您已经知道的语言会更快。除非你想为了好玩而学习一些新语言。

答案 5 :(得分:0)

C结构是这种事情的主要支柱之一。如果您不喜欢该语言的其余部分,您可以用C语言定义数据格式,使用Python定义所有访问代码,并与SWIG缩小差距。我没有太多使用SWIG所以我不知道你能在多大程度上使它工作。如果你不能用Python完成所有的代码,你可以在C中放一点(WriteStructToFile等),因为它们可以非常小并且定义良好。