Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

D language unsigned hash of string

Tags:

hash

d

I am a complete beginner with the D language.

How to get, as an uint unsigned 32 bits integer in the D language, some hash of a string...

I need a quick and dirty hash code (I don't care much about the "randomness" or the "lack of collision", I care slightly more about performance).

 import std.digest.crc;
 uint string_hash(string s) {
    return  crc320f(s);
 }

is not good...

(using gdc-5 on Linux/x86-64 with phobos-2)

like image 521
Basile Starynkevitch Avatar asked May 09 '26 09:05

Basile Starynkevitch


1 Answers

While Adams answer does exactly what you're looking for, you can also use a union to do the casting. This is a pretty useful trick so may as well put it here:

/**
  * Returns a crc32Of hash of a string
  * Uses a union to store the ubyte[]
  * And then simply reads that memory as a uint
  */
uint string_hash(string s){ 
    import std.digest.crc;
    union hashUnion{
        ubyte[4] hashArray;
        uint hashNumber;
    }   
    hashUnion x;
    x.hashArray = crc32Of(s); // stores the result of crc32Of into the array.
    return x.hashNumber;      // reads the exact same memory as the hashArray
                              // but reads it as a uint.
}
like image 153
Colin Grogan Avatar answered May 11 '26 16:05

Colin Grogan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!