Strictly speaking, this makes no sense A file is a file, it's just a bunch of bytes. You can consider them as binary, hex, octal, whatever. It doesn't matter - they're still the exact same thing.

2. Reading the byte at a location other than the beginning of the file, like reading the byte at 0x1F.
That's what Stream.Seek is for. 0x1F is just an offset, so seek to that offset.

Saving the file as hex so that bytes like 00 do not become 20.
I don't know anything that automatically does that kind of conversion.