Erlang 带模式匹配的空二进制列表

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

我正试图解析一个二进制文件,当涉及到返回以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/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字节的情况下被调用,因此这可以正常工作。