【问题标题】:Erlang: skip first bytes of binaryErlang:跳过二进制的第一个字节
【发布时间】:2020-04-22 15:18:32
【问题描述】:

我有带有标头的二进制数据包(\FF 字节的未确定长度序列)并遵循我需要解析的结构化主体。示例数据包: <<255,255,255,255,255,6,8,0,0,1>>, <<255,255,255,255,255,255,255,255,255,10,15,0,0,1>>

解析它的最有效方法是什么?我找到了以下解决方案:

1) 将数据包转换为列表

2) 跳过标题有以下乐趣:

skip_elem([E | Rest], Condition) ->
  case Condition(E) of
    true -> [E | Rest];
    false -> skip_elem(Rest, Condition)
  end;

skip_elem([], _Cond) -> [].

3) 将列表转换为二进制并使用二进制匹配特征解析其主体

但是方法看起来复杂且无效,有没有更有效的解决方案?

【问题讨论】:

    标签: erlang


    【解决方案1】:

    这样的东西能满足你的需要吗?

    behead(<< 255, Packet/binary >>) ->
        behead(Packet);
    behead(Packet) when is_binary(Packet) ->
        Packet.
    

    例如:

    1> behead(<<255,255,255,255,255,6,8,0,0,1>>).
    <<6,8,0,0,1>>
    2> behead(<<255,255,255,255,255,255,255,255,255,10,15,0,0,1>>).
    <<10,15,0,0,1>>
    

    更多详情请见documentation

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      相关资源
      最近更新 更多