Erlang 带模式匹配的空二进制列表
我正试图解析一个二进制文件,当涉及到返回以little endian压缩为16位的数字时,我希望这能起作用:Erlang 带模式匹配的空二进制列表,erlang,Erlang,我正试图解析一个二进制文件,当涉及到返回以little endian压缩为16位的数字时,我希望这能起作用: foo(Bin, Bits) when is_binary(Bin) -> <<A, B, C, D, _Rest>> = Bin, (bar(<<A, B>>, Bits) =/= 0) and (bar(<<C, D>>, Bits) =/= 0). bar(<<N:16/li
foo(Bin, Bits) when is_binary(Bin) ->
<<A, B, C, D, _Rest>> = Bin,
(bar(<<A, B>>, Bits) =/= 0) and (bar(<<C, D>>, Bits) =/= 0).
bar(<<N:16/little-unsigned-integer>>, Bits) ->
binary:at(Bits, N).
foo(Bin,Bits)何时为二进制(Bin)->
=Bin,
(条(,位)=/=0)和(条(,位)=/=0)。
条(,位)->
二进制:at(位,N)。
不幸的是,当Bin小于等于4字节时,匹配器不工作。有没有更好的办法让它变成空的?如果我可以避免在调用者中测试二进制长度,那就更好。您可以执行以下操作:
foo(<<A:16/little-unsigned-integer,B:16/little-unsigned-integer,_Rest/binary>>, Bits) ->
(binary:at(Bits, A) =/= 0) and (binary:at(Bits, B) =/= 0).
foo(,位)->
(二进制:at(位,A)=/=0)和(二进制:at(位,B)=/=0)。
这不适用于长度小于4字节的二进制文件。在这种情况下会发生什么
注意:
binary:at/2
适用于二进制文件,而不是位字符串,偏移量以字节为单位。如果输入长度小于4字节,什么与C
或D
匹配?感谢您的回复。这就是我需要的,让我摆脱困境。在Erlang中摸索二进制代码是非常有益的。该函数永远不会在少于4字节的情况下被调用,因此这可以正常工作。