又是一年的十一假期,去年此时写了锁屏汪,基本够用。
然而工作琐事太多,中年情绪低落。直到这个十一才有兴趣继续搞python。
这个工具能把二进制的文件,转换成文本文件,以16进制的形式呈现。
本来诸如hexdump 或者 MadEdit 之类的软件,都能做到这一点。然而hexdump只能在Linux下使用,MadEdit没有找到以16进制保存文件的选项。别人写的工具不放心怕有毒,所以只能自己写一个。
这样的转换有什么意义呢?比如想比较两个二进制文件的时候,就可以先将这两个文件转换成文本文件,然后就可以使用多种文本比较工具进行比较了。能直接比较二进制文件的工具很少,或者需要收费。
我怎么知道会有这种需求的呢?当然是来自无穷无尽的工作琐事。怎么发市场上的设备,就能出辣么多种问题,
好好的板子就成了砖头。软件都没有能力去修改的BIOS固件,怎么就改变了内容。
人生苦短,我用python。带界面的程序不到100行,新手不到1天完成。
目前对python掌握不深,只能按字节转换,效率不高。做了个多线程处理防止GUI死掉。
打包好的工具只支持win7 64位系统
良心保证绿色无毒,因为是python打包体积小不了。
有源码可自行打包
-
import tkinter as tk
-
from tkinter import ttk
-
import tkinter.filedialog
-
import threading
-
import os
-
-
#选择文件按钮的处理
-
def selectFile():
-
resultlabel.configure(text="", wraplength=600)
-
selectfile = tkinter.filedialog.askopenfilename()
-
if selectfile != '':
-
s_entry.delete(0,tk.END)
-
s_entry.insert(0,selectfile)
-
-
src_file=s_entry.get()
-
if src_file != '':
-
target_file=src_file+".txt"
-
t_entry.delete(0, tk.END)
-
t_entry.insert(0,target_file)
-
convert_button.configure(state="enable")
-
else:
-
t_entry.delete(0, tk.END)
-
convert_button.configure(state="disabled")
-
-
-
def bin2hextext(srcfile,targetfile):
-
#二进制文件srcfile 转换成文本文件 targetfile,16进制显示,带偏移
-
i=1
-
try:
-
fsrc=open(srcfile,mode='rb')
-
ftarget= open(targetfile, mode='w')
-
iBytes = fsrc.read()
-
print("%08x:" % 0, file=ftarget, end='')
-
for s_byte in iBytes:
-
print("%02x" % s_byte,file = ftarget,end='')
-
-
if i%16 == 0:
-
print("" , file=ftarget)
-
print("%08x:" % i, file=ftarget,end='')
-
#刷新文件缓存 显示进度
-
if i%(128*1024) == 0:
-
status = ('%.2f%%' % ((i/(os.path.getsize(srcfile)) * 100)) )
-
ftarget.flush()
-
resultlabel.configure(text=status)
-
i += 1
-
fsrc.close()
-
ftarget.close()
-
return "Convert file successfully"
-
except (OSError,TypeError) as reason:
-
return "Error"+str(reason)
-
-
#创建线程进行处理 防止界面卡死
-
def convert_thread_func(src,target):
-
res = bin2hextext(src, target)
-
resultlabel.configure(text=res, wraplength=600)
-
convert_button.configure(state="enable")
-
-
#转换按键的处理
-
def convert_func():
-
convert_button.configure(state="disabled")
-
resultlabel.configure(text="Processing ... ", wraplength=600)
-
sf = s_entry.get()
-
tf = t_entry.get()
-
t=threading.Thread(target=convert_thread_func,args=(sf,tf))
-
t.start()
-
-
-
root=tk.Tk()
-
root.title("bin2text V0.1 by: deep_pro") #第一个版本 2018-10-04
-
tkinter.Label(root,text="source file:").grid(row=0,column=0)
-
tkinter.Label(root,text="target file:").grid(row=1,column=0)
-
tkinter.Label(root,text=" result :").grid(row=2,column=0)
-
resultlabel=tkinter.Label(root,fg="red",text=" ")
-
resultlabel.grid(row=2,column=1)
-
s_entry=tkinter.Entry(width=99)
-
t_entry=tkinter.Entry(width=99)
-
s_entry.grid(row=0,column=1)
-
t_entry.grid(row=1,column=1)
-
-
ttk.Label(root,text=" ").grid(row=0,column=2)
-
ttk.Label(root,text=" ").grid(row=1,column=2)
-
src_button=ttk.Button(root,text="open",width=8,command = selectFile).grid(row=0,column=3)
-
convert_button=ttk.Button(root,text="convert",width=8,state="disabled",command=convert_func)
-
convert_button.grid(row=1,column=3)
-
-
root.mainloop()
-
-
#打包
-
#pyinstaller -F test.py --noconsole -i 32.ico
阅读(5782) | 评论(0) | 转发(0) |