gpt4 book ai didi

Erlang:在二进制中对字节求和的更快方法

转载 作者:行者123 更新时间:2023-12-01 07:42:23 26 4
gpt4 key购买 nike

下面是添加二进制字节的简单实现。根据 eprof 的说法它很慢(约占总时间的 10% - 主要是因为多次调用 binary:part/3 )。

如何优化?

calc_checksum(Packet) when is_binary(Packet)->  
calc_checksum(Packet, 0).

calc_checksum(<<>>, Acc) ->
Acc band 16#FFFF;

calc_checksum(Packet, Acc) when is_binary(Packet) ->
W = binary:decode_unsigned(binary:part(Packet, 0, 2), little),
NextAcc = Acc + W,
NextBytes = binary:part(Packet, byte_size(Packet), -(byte_size(Packet)-2)),
calc_checksum(NextBytes, NextAcc).

最佳答案

一个更优雅的解决方案是:

calc_checksum(<<W:16/little,Rest/bytes>>, Acc0) ->
Acc1 = Acc0 + W,
calc_checksum(Rest, Acc1);
calc_checksum(<<>>, Acc) -> Acc band 16#FFFF.

如果二进制文件包含奇数个字节,此代码将生成错误。使用模式匹配通常会提供更好更优雅的代码。

关于Erlang:在二进制中对字节求和的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11831777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com