NAME
Algorithm::StringHash::FromCSharp35::XS - C#'s string Hashing Algorithm in V3.5
SYNOPSIS
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
{
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.