今天跟大家唠唠我最近折腾的玩意儿——十六进制编辑器。这东西听起来好像很高大上,但用起来也没那么难,就是打开文件,然后给你展示一堆16进制的数字,让你直接改文件的底层数据。
事情是这样的,前段时间我不是想搞个小工具嘛涉及到一些文件格式的处理,总是感觉不得劲,用文本编辑器打开一堆乱码,根本没法下手。于是我就寻思,干脆自己搞一个十六进制编辑器得了,以后看文件内容啥的也方便。
说干就干,先去网上搜了一圈,发现现成的轮子挺多,像是`WinHex`,`010 Editor`,还有`HxD Hex Editor`啥的。`WinHex`功能是挺强大,但是收费的,咱是穷人,用不起。`010 Editor` 看着也挺专业,感觉学习成本有点高。还是选了 `HxD Hex Editor`,主要是免费,而且界面看起来挺简洁的,操作也比较直观。
装好`HxD`,打开试了试,感觉还不错。打开文件的速度挺快的,而且可以很方便地查找和修改数据。但是,总觉得有些地方用起来不太顺手。比如说,我想批量修改一些数据,就得一个个地改,效率太低了。还有就是,我想自定义一些显示格式,也没找到相应的设置。
这一下子就激起了我的兴趣,既然现成的不好用,那就自己动手写一个呗!
我得找个趁手的工具。考虑到我比较熟悉`Python`,而且`Python`有很多现成的库可以用来处理二进制数据,所以就决定用`Python`来写。
然后就是搭建基本框架。我用`Tkinter`搞了个简单的GUI界面,包括一个文本框用来显示十六进制数据,还有一些按钮用来打开文件、保存文件、查找数据等等。
是读取文件。这部分比较简单,用`Python`的文件操作函数,把文件以二进制方式读取出来,然后转换成十六进制字符串,显示在文本框里。
接下来是修改数据。这部分稍微麻烦一点,需要监听文本框的键盘事件,当用户修改了数据时,要把十六进制字符串转换回二进制数据,然后写回到文件里。
再然后是查找数据。这部分也不难,用`Python`的字符串查找函数,在十六进制字符串里查找用户输入的内容,然后把查找到的位置高亮显示。
实际写起来肯定没这么简单。各种各样的Bug,各种各样的细节问题,让我头都大了。比如说,刚开始的时候,我发现修改后的数据保存不回去,搞了半天才发现是文件打开方式不对。还有就是,查找数据的时候,如果用户输入的是中文,就会出现乱码。
为了解决这些问题,我可没少熬夜。各种查资料,各种Debug,有时候甚至连做梦都在写代码。不过经过一段时间的努力,总算是把基本功能都实现了。
虽然现在这个十六进制编辑器还很简陋,功能也很有限,但是我已经很满意了。至少它能满足我的基本需求,而且是完全按照我的想法来设计的。
这回自己动手写十六进制编辑器的经历还是挺有意思的。不仅让我对文件格式有了更深入的理解,还让我对`Python`的GUI编程有了更进一步的掌握。以后有机会,我还会继续完善这个小工具,让它变得更加强大。