我想要的東西更優雅,以取代以下功能:更好的辦法來分割成塊的二進制,最好有位串內涵
split_packet(_, <<>>) ->
[];
split_packet(Size, P) when byte_size(P) < Size ->
[ P ];
split_packet(Size, P) ->
{Chunk, Rest} = split_binary(P, Size),
[ Chunk | split_packet(Size, Rest) ].
(我現在這不是尾遞歸 - 想保持它簡單,除了沒關係在新版本二郎性能明智)
輸出示例:
1> split_packet(3, <<1,2,3,4,5,6,7,8>>).
[<<1,2,3>>,<<4,5,6>>,<<7,8>>]
與列表理解優雅的解決方案是最好因爲這樣做的結果是進一步處理列表理解,然後可以包裝在一個理解。
我試圖
[ X || <<X:Size/binary>> <= P ].
但是如果大小不是byte_site(P)
多這留下了最後一塊:
2> [ X || <<X:3/binary>> <= <<1,2,3,4,5,6,7,8>> ].
[<<1,2,3>>,<<4,5,6>>]
好的,謝謝。我曾希望用二進制匹配的一個很好的技巧,逃脫我可以做一個很好的一個襯墊出來。 – 2011-05-04 12:52:24
最後一個'split_packet/2'聲明中的'Size'參數沒有被使用,所以它應該被替換爲'_'或者前綴'_'。 – 2015-09-05 14:54:16
@KristinnÖrnSigurðsson謝謝,我把它清理了一下。 – 2015-09-07 08:25:53