mirror of
https://git.proxmox.com/git/pve-common
synced 2025-07-27 15:19:17 +00:00
add FVN digest
Userful for short strings.
This commit is contained in:
parent
1dad1ca5b9
commit
2d3bca34dd
@ -1019,4 +1019,26 @@ sub assert_if_modified {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Digest for short strings
|
||||||
|
# like FNV32a, but we only return 31 bits (positive numbers)
|
||||||
|
sub fnv31a {
|
||||||
|
my ($string) = @_;
|
||||||
|
|
||||||
|
my $hval = 0x811c9dc5;
|
||||||
|
|
||||||
|
foreach my $c (unpack('C*', $string)) {
|
||||||
|
$hval ^= $c;
|
||||||
|
$hval += (
|
||||||
|
(($hval << 1) ) +
|
||||||
|
(($hval << 4) ) +
|
||||||
|
(($hval << 7) ) +
|
||||||
|
(($hval << 8) ) +
|
||||||
|
(($hval << 24) ) );
|
||||||
|
$hval = $hval & 0xffffffff;
|
||||||
|
}
|
||||||
|
return $hval & 0x7fffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fnv31a_hex { return sprintf("%X", fnv31a(@_)); }
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
Loading…
Reference in New Issue
Block a user