- Why did you write HexEdit?
I wrote HexEdit during a couple weeks of my last summer vacation before I started working because I needed to examine WAV files, and I wanted a moderately nice GUI interface. (I also didn’t know that Visual C and Lemmy had (unimpressive but functional) hex displays) It was also an opportunity to learn Win32 programming...
- I have some suggestions...
Feel free to email me any suggestions that you may have. I cannot promise that I will implement them, but I am interested in where HexEdit falls short. Unfortunately, my unfamiliarity at that time with the Win32 API led to a rather lousy design decision early in the coding, which makes remedying the problem in the next version of HexEdit quite a bit of work, so the update schedule will be irregular at best.
- Can I get/purchase a copy of the source code?
At present, no. This is partly because the code needs a complete re-write due to some poor design decisions early on (I started with no Windows programming experience) and partly because I may expand upon it in the future and I am not sure of the legal issues regarding source code. While this can be frustating to all you programmers who would like to fix that annoying bug, it would be even more frustrating for me if someone bought the source code, modified it, then decided to use it for their own purposes (e.g. sell it, bundle it, etc.) since it was now no longer completely my software. (Or just copy it, change some stuff to make it different, then call it their own.) If you think that my opinion is unwarranted, feel free to email me evidence that contradicts me. (Please don’t email me merely your opinion; I have read a lot of that, some of it very good, on Slashdot. However, I could be conviced by statistics, court cases, personal testimonies, etc.)
- How do I use HexEdit?
Those who have used a traditional hex editor should be quite at home. The left side is the offset of the first character of the row, in hex. The middle section is the hex value, and the right is the ASCII value. The offset section is not editable, but you can switch between the hex and the ASCII section with Tab.
Please do not email me questions on how to use a hex editor; learn about hexadecimal and file offsets first, then everything will become obvious. On the other hand, I have attempted to give some directions to those unfamiliar with a hex editor below. If you still do not understand how to use HexEdit after reading it, I would be happy to discuss possible improvements on the documentation.
- What is HexEdit good for?
Mostly traditional hex viewing and quick changes. Insertion can be done, but it is a little clunky. (Also not advisable unless you know what you are doing). The uses that I find for a hex editor are mostly viewing binary files to debug import filters (WAV files, graphics, etc), modifications of executables (rarely necessary or useful), and snooping for interesting strings in exe or data files (undocumented exported functions, undocumented commands, etc.) HexEdit is also useful for copying hex strings from files using cut and paste.
- I received directions to change a value at offset 000352 to 31 hex.
What does this mean?
The offset is the position in the file where this character (or characters) is located. So if my file is
21 3b fa 5b 72 9c 20 da 32 8e 00 01 9f 62 8a 22
21is at offset
22is at offset
f). The offset of the first byte of each line is displayed in the leftmost column of HexEdit.
- What is “hexadecimal” and why is it used?
We usually use the base 10, or decimal, system for numbering things in our daily life. However, this is not a convenient system for computers, since they are based on powers of two, not ten. The most natural system for computers is base 2, or binary. However, treating the character
00111010is cumbersome; it is much easier to use a hexadecimal, which is a base 16 system— hexadecimal condenses
3a, which is the same as writing
3 * 16^1 + 10 * 16^0 = 3 * 16 + 10 = 58 = 00111010 = ':'. (Base 16 uses characters
0 - 9, then
a - ffor 10 through 15) Hexadecimal also has the convenient property that converting
1010, then placing the two parts next to each other (
3a = 0011 1010) yields the correct binary number.
Please note that this is not a rigorous mathematical explanation, and it assumes some knowledge of bases.