I'm trying to reverse binary like this:
reverse(Bin) ->
list_to_binary(lists:reverse([rev_bits(<<B>>) || B <- binary:bin_to_list(Bin)])).
rev_bits(<<A:1, B:1, C:1, D:1, E:1, F:1, G:1, H:1>>) ->
<<H:1, G:1, F:1, E:1, D:1, C:1, B:1, A:1>>.
I don't like this code. Could you please advise better way to accomplish this routine?
3条答案
按热度按时间ctrmrzij1#
有点像rev_bits函数:
我相信二进制级联是优化的,所以这应该是相当快了。
编辑:使用子句代替case ... of ... end。
lmvvr0a82#
与fenollp迭代方法进行比较的基准测试结果。基准测试是使用包含8192个随机字节的随机二进制文件调用两个函数完成的:
基准测试我的方法:调用reverse/1函数10次.过程耗时0.000299秒BENCHMARK fenollp迭代法:调用reverse_recursive/1函数10次。过程耗时0.058528秒
基准测试我的方法:调用reverse/1函数100次.过程耗时0.002703秒BENCHMARK fenollp迭代法:调用reverse_recursive/1函数100次。过程耗时0.391098秒
我提出的方法通常至少快100倍。
inb24sb23#