基于Python开发数据类型转换工具

发布时间:2026/8/24 22:20:03
基于Python开发数据类型转换工具 一、小程序功能设计1、功能背景1在嵌入式岗位的工作中经常会涉及到数据类型转换虽然网络上有网页端的数据类型转换工具但部分企业可能会禁止登录外网网络的现有资源可能无法使用。2对此可以设计程序实现离线的数据类型转换这样在涉及到数据类型转换的计算时在本地即可使用数据类型转换的功能。2、功能定义1用户在输入框输入待转换的数值小程序自动将各个类型的转换结果全部展示在下方。2用户可选择以十进制或十六进制输入原始数据如果选择十六进制则仅支持输入整数类型数据。3如果原始数据的大小超出数据类型可表示的范围则对应数据类型的转换结果不会显示。二、小程序开发1、开发环境1需要确认安装的Python是否自带tkinter库图形依赖有则无需单独安装。2安装pyinstaller库该库主要用于将.py打包成可执行文件.exe使其运行能够脱离Python环境。2、程序源码import tkinter as tk from tkinter import ttk, messagebox import struct def swap_bytes(data: bytes, mode: str) - bytes: length len(data) if mode ABCD: return data elif mode DCBA: return data[::-1] elif mode BADC: lst list(data) for i in range(0, length, 2): if i1 length: lst[i], lst[i1] lst[i1], lst[i] return bytes(lst) elif mode CDAB: if length 4: return bytes([data[2],data[3],data[0],data[1]]) elif length 8: return bytes([data[2],data[3],data[0],data[1],data[6],data[7],data[4],data[5]]) return data return data def bytes2hexstr(b:bytes)-str: return .join(f{x:02X} for x in b) Q_SCALE { Q15: 1 15, Q16:116, Q30:130, Q31:131 } class NumConvertApp(tk.Tk): def __init__(self): super().__init__() self.title(嵌入式数字格式转换器) self.geometry(1420x840) self.resizable(True,True) self.input_mode tk.StringVar(valuedec) self.raw_input tk.StringVar() # 顶部输入区 top_frame ttk.Frame(self) top_frame.pack(fillx,padx12,pady8) ttk.Radiobutton(top_frame,text十进制,variableself.input_mode,valuedec,commandself.calc_all).grid(row0,column0) ttk.Radiobutton(top_frame,text十六进制,variableself.input_mode,valuehex,commandself.calc_all).grid(row0,column1,padx12) ttk.Label(top_frame,text输入数值:).grid(row1,column0,stickyw) entry ttk.Entry(top_frame,textvariableself.raw_input,width38) entry.grid(row1,column1,padx6,pady4) entry.bind(KeyRelease,lambda e:self.calc_all()) # 表头 header_frame ttk.Frame(self) header_frame.pack(fillx,padx12) ttk.Label(header_frame,text数据类型,width22).grid(row0,column0) ttk.Label(header_frame,textABCD(大端序),width35).grid(row0,column1) ttk.Label(header_frame,textDCBA(小端序),width35).grid(row0,column3) ttk.Label(header_frame,textBADC,width35).grid(row0,column5) ttk.Label(header_frame,textCDAB,width35).grid(row0,column7) self.row_widgets [] type_list [ (UINT16,H,2), (INT16,h,2), (UINT32,I,4), (INT32,i,4), (FLOAT32,f,4), (UINT64,Q,8), (INT64,q,8), (FLOAT64,d,8), ] for row_idx,(name,fmt,blen) in enumerate(type_list): fr ttk.Frame(self) fr.pack(fillx,padx12,pady3) ttk.Label(fr,textf{name},width18).grid(row0,column0) wids {name:name,fmt:fmt,blen:blen,entries:[]} # 4组输入框复制按钮隔一列摆放 col_pos 1 for _ in range(4): e ttk.Entry(fr,width20) e.grid(row0,columncol_pos,padx2) btn ttk.Button(fr,text复制,commandlambda entry_widgete:self.copy_to_clip(entry_widget)) btn.grid(row0,columncol_pos1,padx2) wids[entries].append(e) col_pos 2 self.row_widgets.append(wids) # Q格式区域 q_frame ttk.LabelFrame(self,textQ定点格式(Q15/Q16/Q30/Q31)) q_frame.pack(fillx,padx12,pady10) self.q_text tk.Text(q_frame,height6) self.q_text.pack(fillboth,expandTrue,padx4) self.calc_all() def copy_to_clip(self,entry_widget): val entry_widget.get() self.clipboard_clear() self.clipboard_append(val) messagebox.showinfo(提示,已复制到剪贴板) def parse_input(self): s self.raw_input.get().strip() if not s: return None try: if self.input_mode.get() dec: if . in s: return float(s) else: return int(s) else: s s.replace(0x,) return int(s,16) except Exception: return None def calc_all(self): val self.parse_input() for rw in self.row_widgets: for e in rw[entries]: e.delete(0,tk.END) self.q_text.delete(1.0,tk.END) if val is None: return for rw in self.row_widgets: fmt rw[fmt] blen rw[blen] try: pack_data struct.pack(fmt,val) except Exception: continue modes [ABCD,DCBA,BADC,CDAB] for i,m in enumerate(modes): swapped swap_bytes(pack_data,m) hex_str bytes2hexstr(swapped) rw[entries][i].delete(0,tk.END) rw[entries][i].insert(0,hex_str) q_out [] for qname,scale in Q_SCALE.items(): q_int round(val * scale) restore q_int / scale q_out.append(f{qname:5s}: Q定点整数{q_int},还原浮点{restore:.8f}) self.q_text.insert(tk.END,\n.join(q_out)) if __name__ __main__: app NumConvertApp() app.mainloop()3、可执行程序生成在程序源码文件num_format_converter_gui.py所在目录下打开终端输入命令“pyinstaller -w -F num_format_converter_gui.py”即可生成可执行文件num_format_converter_gui.exe