【问题标题】:Pattern matching a binary in erlang模式匹配erlang中的二进制文件
【发布时间】:2015-07-10 00:37:31
【问题描述】:

我正在尝试对二进制文件进行模式匹配

  <<_:(A * ?N + A + B)/binary,T:1/binary,_/binary>>

然而,erlang 似乎抛出了一个错误,指出变量 T 未绑定。只是一个简单的解释:我想忽略一定数量的字节,然后读取一个字节,然后忽略剩余的字节。我怎样才能做到这一点?

【问题讨论】:

  • 根据this explanation,您不能使用具有位大小变量的表达式。尝试先绑定IgnoreBytes=A*?N+A+B再匹配:&lt;&lt;_:IgnoreBytes/binary,T:1/binary,_/binary&gt;&gt; = SomeBinary
  • 是的。如果你想把它作为答案,我可以接受它

标签: erlang


【解决方案1】:

在位语法中,我们不能使用运行时表达式作为位大小。 我们只能使用常量、编译时表达式,如_:(4*8)/binary 和变量:_:Var/binary

在您的情况下,解决方案是首先将 A * ?N + A + B 绑定到变量。

IgnoredBytes = A * ?N + A + B,
<<_:IgnoredBytes/binary,T:1/binary,_/binary>> = SomeBinary,
T.

最好在answer from [erlang-questions]中解释

【讨论】:

    猜你喜欢
    • 2012-07-03
    • 2013-01-04
    • 1970-01-01
    • 2020-04-23
    • 2012-05-23
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2020-06-10
    相关资源
    最近更新 更多