Thread overview
Converting uint[] slice to string for the purpose of hashing?
Jul 23, 2015
Enjoys Math
Jul 23, 2015
cym13
Jul 23, 2015
Enjoys Math
Jul 23, 2015
Enjoys Math
Jul 23, 2015
Temtaime
Jul 23, 2015
Jonathan M Davis
July 23, 2015
1.  Is the best way to hash a uint[] slice

2.  How do you do it?


July 23, 2015
On Thursday, 23 July 2015 at 11:15:46 UTC, Enjoys Math wrote:
> 1.  Is the best way to hash a uint[] slice
>
> 2.  How do you do it?

IIRC, std.digest functions take ubyte[] as input, so to hash a uint[] I would do the following:

    void main(string[] args)
    {
        import std.conv;
        import std.digest.md;

        int[] a   = [1, 2, 3, 4, 5];
        auto  md5 = new MD5Digest();

        md5.put(a.to!(ubyte[]));

        auto hash = md5.finish();
        writeln(hash);
    }

July 23, 2015
On Thursday, 23 July 2015 at 11:49:05 UTC, cym13 wrote:
> On Thursday, 23 July 2015 at 11:15:46 UTC, Enjoys Math wrote:
>> 1.  Is the best way to hash a uint[] slice
>>
>> 2.  How do you do it?
>
> IIRC, std.digest functions take ubyte[] as input, so to hash a uint[] I would do the following:
>
>     void main(string[] args)
>     {
>         import std.conv;
>         import std.digest.md;
>
>         int[] a   = [1, 2, 3, 4, 5];
>         auto  md5 = new MD5Digest();
>
>         md5.put(a.to!(ubyte[]));
>
>         auto hash = md5.finish();
>         writeln(hash);
>     }

Thanks.  That worked.   Here's my code:

module hashtools;
import std.conv;
import std.digest.md;

string uintSliceToHash(const uint[] slice) {
    auto  md5 = new MD5Digest();
    md5.put(slice.to!(ubyte[]));
    return md5.finish().to!(string);
}

unittest {
    import std.stdio;
    uint[] slice = [1,2,3,4];
    writeln(uintSliceToHash(slice));
}

July 23, 2015
On Thursday, 23 July 2015 at 12:10:04 UTC, Enjoys Math wrote:
> On Thursday, 23 July 2015 at 11:49:05 UTC, cym13 wrote:
>>     [...]
>
> Thanks.  That worked.   Here's my code:
>
> module hashtools;
> import std.conv;
> import std.digest.md;
>
> string uintSliceToHash(const uint[] slice) {
>     auto  md5 = new MD5Digest();
>     md5.put(slice.to!(ubyte[]));
>     return md5.finish().to!(string);
> }
>
> unittest {
>     import std.stdio;
>     uint[] slice = [1,2,3,4];
>     writeln(uintSliceToHash(slice));
> }

Actually, uint[] seems to be hashable:

    import std.stdio;
    int[uint[]] aa;
    aa[[1,2,3]] = 5;
    writeln(aa[[1,2,3]]);

WORKS
July 23, 2015
All types are hashable and for your own structs and classes you can redefine opHash
July 23, 2015
On Thursday, July 23, 2015 12:56:13 Temtaime via Digitalmars-d-learn wrote:
> All types are hashable and for your own structs and classes you can redefine opHash

It's toHash, actually, but yeah.

- Jonathan M Davis