Erlang:跳过二进制的第一个字节

Dar*_*key 1 erlang

我有带有标头(不确定长度的\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) -> [].
Run Code Online (Sandbox Code Playgroud)

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

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

pot*_*lad 5

这样的事情会做你需要的吗?

behead(<< 255, Packet/binary >>) ->
    behead(Packet);
behead(Packet) when is_binary(Packet) ->
    Packet.
Run Code Online (Sandbox Code Playgroud)

例如:

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>>
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅文档