md5 return toHexString
Johannes Pfau via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Apr 24 12:39:35 PDT 2015
Am Fri, 24 Apr 2015 18:02:57 +0000
schrieb "AndyC" <andy at squeakycode.net>:
> 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
https://issues.dlang.org/show_bug.cgi?id=9279
toHexstring doesn't return a string, it returns char[n], a fixed-size
array of length n. It shouldn't implicitly convert to a string.
More information about the Digitalmars-d-learn
mailing list