我想对二进制文件进行递归,并在每次调用中从二进制文件中读取最多 32 位,并将其返回到新的二进制文件中。但我无法让模式匹配按我想要的方式工作。
binaryToBinary(Source) ->
binaryToBinaryAux(Source, <<>>).
binaryToBinaryAux(<<>>, Target) ->
Target;
binaryToBinaryAux(<<H:32/binary, T/binary>>, Target) ->
binaryToBinaryAux(<<T/binary>>, <<Target/binary, H>>).
这是我得到的模式匹配错误:
10> mymodule:binaryToBinary(<<"JonasPonas">>).
** exception error: no function clause matching
mymodule:binaryToBinaryAux(<<"JonasPonas">>,<<>>)
(mymodule.erl, line 51)
我对二进制文件的模式匹配做错了什么?
图案<<H:32/binary, T/binary>>
匹配至少包含 32 个字节的二进制,将前 32 个字节分配给 H,其余字节分配给 T。该模式<<>>
匹配空的二进制文件。这些是你唯一的模式。
<<"JonasPonas">>
既不为空也不至少有 32 个字节。因此,它与您的任何模式都不匹配,并且您会得到您所做的错误。
要解决此问题,请添加一个处理小于 32 字节的二进制文件的模式(您也可以删除空模式,因为它会变得多余)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)