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

时间:2014-05-31 19:44:32

标签: 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) -> [].

3)将lit转换为二进制并使用二进制匹配功能解析其正文。

但这似乎是复杂而无效的方式,是否有更有效的解决方案?

1 个答案:

答案 0 :(得分:4)

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

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>>