"John Colvin" <john.loughran.col...@gmail.com> schrieb im Newsbeitrag news:dyfkblqonigrtmkwt...@forum.dlang.org... > On Monday, 3 March 2014 at 21:44:16 UTC, Christof Schardt wrote: >> I'm evaluating D and try to write a binary io class. >> I got stuck with strings: >> >> void rw(ref string x) >> { >> if(_isWriting) >> { >> int size = x.length; >> _f.rawWrite((&size)[0..1]); >> _f.rawWrite(x); >> } >> else >> { >> int size; >> _f.rawRead((&size)[0..1]); >> >> ... what now? >> } >> } >> >> Writing is ok, but how do I read the bytes to the >> string x after having its size? > > > Assuming you're not expecting pre-allocation (which I infer from your > choice of "ref string" instead of "char[]"), you could do this: > >> void rw(ref string x) >> { >> if(_isWriting) >> { >> size_t size = x.length; >> _f.rawWrite((&size)[0..1]); >> _f.rawWrite(x); >> } >> else >> { >> size_t size; >> _f.rawRead((&size)[0..1]); >> auto tmp = new char[size]; >> _f.rawRead(tmp); >> import std.exception : assumeUnique; >> x = tmp.assumeUnique; >> } >> }
Thanks, John, this works. Though it feels a bit strange, that one has to do such trickery in order to perform basic things like binary io of strings.