md5 return toHexString

AndyC via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Apr 24 11:02:57 PDT 2015


On Friday, 24 April 2015 at 17:56:59 UTC, tcak wrote:
> On Friday, 24 April 2015 at 17:50:03 UTC, AndyC wrote:
>> Hi All, I cannot seem to understand whats wrong with this:
>>
>> // main.d
>> import std.stdio;
>> import std.digest.md;
>> import std.file;
>>
>>
>> string md5sum(const string fname)
>> {
>>    MD5 hash;
>>
>>    File f = File(fname, "rb");
>>    foreach( ubyte[] buf; f.byChunk(4096))
>>    {
>>        hash.put(buf);
>>    }
>>
>>    string s = toHexString!(LetterCase.lower)(hash.finish());
>>    writeln(s);   //This is correct
>>    return s;
>> }
>>
>> void main()
>> {
>>    string crc = md5sum("main.d");
>>    writeln(crc);  //This is garbage
>> }
>>
>>
>> The writeln in md5sum prints correctly, but the "return s" 
>> seems to mess it up?  What's going on?
>>
>> Thanks for you time,
>>
>> -Andy
>
> Just do that "return s.dup()". Then it works for me. That's 
> probably due to the fact that s is in stack. But I am not sure 
> how "toHexString" works.


Ah, yep, that works.  I'd originally written it as:
return toHexString!(LetterCase.lower)(hash.finish());

Which doesn't work, so used the temp string to test it.

Now I'm using:
return toHexString!(LetterCase.lower)(hash.finish()).dup();

Kinda weird.  But works.  Thank you!

-Andy


More information about the Digitalmars-d-learn mailing list