NAME
Algorithm::StringHash::FromCSharp35::XS - C#'s string Hashing Algorithm in V3.5
SYNOPSIS
use strict;
use warnings;
use Algorithm::StringHash::FromCSharp35::XS qw(GetHashCode);
my $str = "hello world";
my $hashcode = GetHashCode($str);
print $hashcode;
DESCRIPTION
This module implement the C#'s getHashCode function in V3.5. The algorithm always produce a unsigned int for any string and always return the same unsigned int for the same string. Comparison with other string hash algorithm, it is characterized by fast.
METHODS
GetHashCode($string)
The only method, export by default. Input is some string, output is a number between 0 and 2^32.
IMPLEMENTATION OF PERL
You can take the implementation if perl if not able to build XS module.
sub getHashCode
{
use bigint;
no warnings 'uninitialized';
my $str = shift;
my @str = split //, $str;
my $num = 0x15051505;
my $num2 = $num;
my $len=length($str);
my $i = 0;
my $pos = 0;
my $field_max = 1<<32;
for($i=$len;$i>0;$i-=4)
{
my $numptr;
$numptr = (ord($str[$pos*4+3])<<24) + (ord($str[$pos*4+2])<<16) + (ord($str[$pos*4+1])<<8) + ord($str[$pos*4]);
$num = ((($num << 5) + $num) + ($num >> 0x1b)) ^ $numptr;
$num %= $field_max;
if($i<=2) {last;}
$pos++;
$numptr = (ord($str[$pos*4+3])<<24) + (ord($str[$pos*4+2])<<16) + (ord($str[$pos*4+1])<<8) + ord($str[$pos*4]);
$num2=((($num2 << 5) + $num2) + ($num2 >> 0x1b)) ^ $numptr;
$num2 %= $field_max;
$pos++;
}
return ($num + ($num2 * 0x5d588b65)) % $field_max;
}
AUTHOR
Written by ChenGang, yikuyiku.com@gmail.com
COPYRIGHT
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.