Binary 如何在Erlang中对二进制文件进行模式匹配?

Binary 如何在Erlang中对二进制文件进行模式匹配?,binary,erlang,pattern-matching,Binary,Erlang,Pattern Matching,我想对一个二进制文件进行递归,在每次调用中,从二进制文件中读取最多32位,并以一个新的二进制文件返回。但我无法让模式匹配按我所希望的那样工作 binaryToBinary(Source) -> binaryToBinaryAux(Source, <<>>). binaryToBinaryAux(<<>>, Target) -> Target; binaryToBinaryAux(<<H:32/binary,

我想对一个二进制文件进行递归,在每次调用中,从二进制文件中读取最多32位,并以一个新的二进制文件返回。但我无法让模式匹配按我所希望的那样工作

binaryToBinary(Source) ->
    binaryToBinaryAux(Source, <<>>).

binaryToBinaryAux(<<>>, Target) ->
    Target;
binaryToBinaryAux(<<H:32/binary, T/binary>>, Target) ->
    binaryToBinaryAux(<<T/binary>>, <<Target/binary, H>>).
binaryToBinary(源)->
binaryToBinaryAux(来源,)。
binaryToBinaryAux(,目标)->
目标;
binaryToBinaryAux(,目标)->
二进制Tobinaryaux(,)。
以下是模式匹配的错误:

10> mymodule:binaryToBinary(<<"JonasPonas">>).
** exception error: no function clause matching
                    mymodule:binaryToBinaryAux(<<"JonasPonas">>,<<>>) 
                                                          (mymodule.erl, line 51)
10>mymodule:binaryToBinary()。
**异常错误:没有匹配的函数子句
mymodule:binaryToBinaryAux(,)
(mymodule.erl,第51行)
二进制文件的模式匹配有什么问题?

模式
匹配至少包含32个字节的二进制文件,将前32个字节分配给H,将剩余字节分配给T。模式
匹配空二进制文件。这些是你唯一的模式

既不是空的,也没有至少32个字节。因此,它与您的任何一种模式都不匹配,您会得到您所做的错误


若要修复此问题,请添加一个处理少于32字节的二进制文件的模式(您也可以删除空模式,因为它将是多余的)。

这应该可以正常工作:

binaryToBinary(Source) ->
    binaryToBinaryAux(Source, <<>>).

binaryToBinaryAux(<<>>, Target) ->
    Target;
binaryToBinaryAux(<<H:32/binary, T/binary>>, Target) ->
    binaryToBinaryAux(<<T/binary>>, <<Target/binary, H/binary>>);
binaryToBinaryAux(Rest, Target) ->
    binaryToBinaryAux(<<>>, <<Target/binary, Rest/binary>>).
binaryToBinary(源)->
binaryToBinaryAux(来源,)。
binaryToBinaryAux(,目标)->
目标;
binaryToBinaryAux(,目标)->
双核生物钟(,);
binaryToBinaryAux(Rest,Target)->
二进制Tobinaryaux(,)。

我添加了一个带有
binaryToBinaryAux(,Target)->Target的案例。
但是我得到了这个错误:
**异常错误:函数mymodule:binaryToBinaryAux/2
@Jonas中的参数不正确,但不是在输入上,对吗?当我在超过32字节的输入上运行代码时(即使没有额外的大小写),我也会遇到这个错误。若要修复此问题,请在问题中发布的代码的第7行将
H
替换为
H/binary