www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Converting uint[] slice to string for the purpose of hashing?

reply "Enjoys Math" <enjoysmath gmail.com> writes:
1.  Is the best way to hash a uint[] slice

2.  How do you do it?
Jul 23 2015
parent reply "cym13" <cpicard openmailbox.org> writes:
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); }
Jul 23 2015
parent reply "Enjoys Math" <enjoysmath gmail.com> writes:
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)); }
Jul 23 2015
parent reply "Enjoys Math" <enjoysmath gmail.com> writes:
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
Jul 23 2015
parent reply "Temtaime" <temtaime gmail.com> writes:
All types are hashable and for your own structs and classes you 
can redefine opHash
Jul 23 2015
parent Jonathan M Davis via Digitalmars-d-learn writes:
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
Jul 23 2015