gpt4 book ai didi

perl - Perl 中的快速字符串校验和函数生成 0..2^32-1 范围内的值

转载 作者:行者123 更新时间:2023-12-04 03:02:48 25 4
gpt4 key购买 nike

我正在寻找具有以下属性的 Perl 字符串校验和函数:

  • 输入:未定义长度的 Unicode 字符串 ( $string )
  • 输出:无符号整数( $hash ),其中 0 <= $hash <= 2^32-1持有(0 到 4294967295,匹配 4 字节 MySQL unsigned int 的大小)

  • 伪代码:
    sub checksum {
    my $string = shift;
    my $hash;
    ... checksum logic goes here ...
    die unless ($hash >= 0);
    die unless ($hash <= 4_294_967_295);
    return $hash;
    }

    理想情况下,校验和函数应该快速运行,并且应该在目标空间( 0 .. 2^32-1 )中生成一些均匀的值以避免冲突。在这个应用程序中,随机碰撞是完全非致命的,但显然我想尽可能避免它们。

    鉴于这些要求,解决此问题的最佳方法是什么?

    最佳答案

    任何散列函数就足够了 - 只需将其截断为 4 字节并转换为数字。好的散列函数具有随机分布,无论您在何处截断字符串,该分布都是恒定的。

    我建议 Digest::MD5因为它是 Perl 标准中最快的哈希实现。 String::CRC,正如 Pim 提到的,也是用 C 实现的,应该更快。

    以下是如何计算散列并将其转换为整数:

    use Digest::MD5 qw(md5);
    my $str = substr( md5("String-to-hash"), 0, 4 );
    print unpack('L', $str); # Convert to 4-byte integer (long)

    关于perl - Perl 中的快速字符串校验和函数生成 0..2^32-1 范围内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1946216/

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