digitalmars.D.learn - Exception thrown while trying to read file
- Matt (24/24) Oct 03 2014 I am building a PE-COFF file reader, just for education purposes,
- thedeemon (4/8) Oct 03 2014 readf is for reading text, it expects to see some digits. You're
- Matt (2/10) Oct 03 2014 much obliged, many thanks
- ketmar via Digitalmars-d-learn (10/10) Oct 03 2014 On Fri, 03 Oct 2014 14:19:23 +0000
I am building a PE-COFF file reader, just for education purposes, and I keep getting a ConvException come up, stating: --- Unexpected ' --- Now, I have no idea how I'm getting this. The code at that point looks like the following: --- // look for the identifier // this gives us the offset to the magic number uint offs; file.seek(0x3c, SEEK_SET); file.readf("%d", &offs); // this is the problem line writefln("magic number offset: %d", offs); file.seek(offs, SEEK_SET); --- With the exception being raised on the writefln. I have the same trouble with writeln("magic number offset: ", offs); and I'm not sure how to go about fixing it. About the only clue I can come up with, is that if I were to look at the section of code in the hex editor, the number at that point generates a "'", the offending character, when represented as a character array. Does anyone else see whatever it is that I'm doing wrong?
Oct 03 2014
On Friday, 3 October 2014 at 11:30:02 UTC, Matt wrote:I am building a PE-COFF file reader file.seek(0x3c, SEEK_SET); file.readf("%d", &offs); // this is the problem line Does anyone else see whatever it is that I'm doing wrong?readf is for reading text, it expects to see some digits. You're reading a binary file, not a text, so no ASCII digits are found in that place. Use rawRead instead of readf.
Oct 03 2014
On Friday, 3 October 2014 at 13:48:41 UTC, thedeemon wrote:On Friday, 3 October 2014 at 11:30:02 UTC, Matt wrote:much obliged, many thanksI am building a PE-COFF file reader file.seek(0x3c, SEEK_SET); file.readf("%d", &offs); // this is the problem line Does anyone else see whatever it is that I'm doing wrong?readf is for reading text, it expects to see some digits. You're reading a binary file, not a text, so no ASCII digits are found in that place. Use rawRead instead of readf.
Oct 03 2014
On Fri, 03 Oct 2014 14:19:23 +0000 Matt via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> wrote: also you can use my iv.io module to reading binary numbers: http://repo.or.cz/w/iv.d.git/blob_plain/HEAD:/io.d like this: auto offs =3D file.readNum!uint(); this is endian-safe too (in the sense that it assumes that file data is little-endian). or, if you want to do it dirty, replace your readf with this: file.rawRead((&offs)[0..1]);
Oct 03 2014