什么语言是二进制的,因为Perl是文本的?

ehd*_*hdr 15 scripting patch binary-data fileparsing

我正在寻找脚本(或更高级别的编程)语言(或者例如Python或类似语言的模块),以便毫不费力地分析和操作文件中的二进制数据(例如核心转储),就像Perl允许非常流畅地操作文本文件一样.

我想要做的事情包括以各种形式(二进制,十进制,十六进制)呈现数据的任意块,将数据从一个endianess转换为另一个endianess,等等.也就是说,你通常会使用C或汇编的东西,但我是寻找一种语言,允许非常快速地编写一小段代码用于高度特定的一次性目的.

有什么建议?

non*_*one 27

我想要做的事情包括以各种形式(二进制,十进制,十六进制)呈现数据的任意块,将数据从一个endianess转换为另一个endianess,等等.也就是说,你通常会使用C或汇编的东西,但我是寻找一种语言,允许非常快速地编写一小段代码用于高度特定的一次性目的.

好吧,虽然它看似违反直觉,但我发现erlang非常适合这种情况,即由于它对模式匹配的强大支持,甚至是字节和位(称为" Erlang位语法 ").这使得创建甚至非常高级的程序非常容易,这些程序可以处理在字节上甚至在位级别上检查和操作数据:

自2001年以来,函数语言Erlang带有一个面向字节的数据类型(称为二进制),并带有用于对二进制进行模式匹配的结构.

并引用informIT.com:

(Erlang)与二进制类型结合使用时,模式匹配真的开始变得有趣.考虑从网络接收数据包然后处理它们的应用程序.分组中的四个字节可以是网络字节顺序分组类型标识符.在Erlang中,您只需要一个可以将其转换为内部处理数据结构的processPacket函数.它看起来像这样:

processPacket(<<1:32/big,RestOfPacket>>) ->
    % Process type one packets
    ...
;
processPacket(<<2:32/big,RestOfPacket>>) ->
    % Process type two packets
    ...
Run Code Online (Sandbox Code Playgroud)

因此,erlang具有内置的模式匹配支持,并且它是一种功能性语言,非常具有表现力,例如参见erlang中ueencode的实现:

uuencode(BitStr) ->
<< (X+32):8 || <<X:6>> <= BitStr >>.
uudecode(Text) ->
<< (X-32):6 || <<X:8>> <= Text >>.
Run Code Online (Sandbox Code Playgroud)

有关介绍,请参阅Erlang中的Bitlevel Binaries和Generalized Comprehension.您可能还想查看以下一些指针:

  • 我也会在这个问题上使用erlang (2认同)
  • 我同意.Joe Armstrong总是说他无法相信没有其他语言在Bits上有Bit文字和模式匹配.我完全同意.我的意思是,他们把Float文字(实际上只有极少数科学程序员需要)放在每种语言中,但没有Bit语法?为什么?如果你有String文字和Regexps,添加Bitstrings和Bit Patterns就没那么大了,不是吗?[翻身.] (2认同)

too*_*kit 5

perl的包装拆包