嗨,这是我在这里的第一篇文章,希望你们一切都好。所以我刚刚开始 erlang,我遇到了一个问题,我还不知道如何解决。
所以我收到的二进制文件格式为
<<56, 23, 67, 34, 45, 78, 01, 54, 67, 87, 45, 53, 01, 34, 56, 78>>
我的目标是根据 01 将其拆分为子列表(如果更有效,则为二进制列表)。
例如,上面的结果应该是这样的:
<<56, 23, 67, 34, 45, 78>> <<54, 67, 87, 45, 53>> <<34, 56, 78>>
-or-
[[56, 23, 67, 34, 45, 78], [54, 67, 87, 45, 53], [34, 56, 78]]
01 是分隔标记,不需要包含在最终输出中。
我已经尝试过这样的事情:(如果有更好的方法请忽略)
parse1([]) -> [];
parse1(1) -> io:format("SOHSOHSOHSOHSOHSSOHSOHS");
parse1(Reply) -> parse1({Reply, []});
parse1({Reply, nxtParse}) ->
[H | T] = Reply,
case H of
_ when H > 1 ->
[H | nxtParse],
io:format("Reply 1 = ~p~n", [H]),
parse1({T, nxtParse});
_ when H == 1 ->
io:format("SOHSOHSOHSOHSOHSSOHSOHS");
[] ->
ok
end.
这根本不是很干净,也根本不像专业人士写的那样。我敢肯定,当有人暗示我时,我会“呃”地拍拍我的头。
我意识到肯定有不止一种解决方案,但最好的解决方案是什么。看来 ERL 有这么多 BIF 和做事方式,我想我只能找到我的方法了。
感谢大家的帮助
-B