编码解码程序
程序设计
1.选择类型
-出现对话框显示:“请选择你要解码的数据类型”
-选项:1.数字 2.数字浮点数 3.英文文本 4.中文文本 5.图像
2.转换数据
-数字整数
原码反码补码
二进制 八进制 十六进制
-浮点数
二进制
-英文文本
根据ASCII码转换(参考:chr()ord())
-中文文本
unicode转换
tkinter
1.介绍
-Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
2.编程
-kinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
3.步骤
-导入 Tkinter 模块
-创建控件
-指定这个控件的 master, 即这个控件属于哪一个
-告诉 GM(geometry manager) 有一个控件产生了。
4.控件
Button | 按钮控件;在程序中显示按钮。 |
---|---|
Canvas | 画布控件;显示图形元素如线条或文本 |
Checkbutton | 多选框控件;用于在程序中提供多项选择框 |
Entry | 输入控件;用于显示简单的文本内容 |
Frame | 框架控件;在屏幕上显示一个矩形区域,多用来作为容器 |
Label | 标签控件;可以显示文本和位图 |
Listbox | 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户 |
Menubutton | 菜单按钮控件,用于显示菜单项。 |
Menu | 菜单控件;显示菜单栏,下拉菜单和弹出菜单 |
Message | 消息控件;用来显示多行文本,与label比较类似 |
Radiobutton | 单选按钮控件;显示一个单选的按钮状态 |
Scale | 范围控件;显示一个数值刻度,为输出限定范围的数字区间 |
Scrollbar | 滚动条控件,当内容超过可视化区域时使用,如列表框。. |
Text | 文本控件;用于显示多行文本 |
Toplevel | 容器控件;用来提供一个单独的对话框,和Frame比较类似 |
Spinbox | 输入控件;与Entry类似,但是可以指定输入范围值 |
PanedWindow | PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。 |
LabelFrame | labelframe 是一个简单的容器控件。常用与复杂的窗口布局。 |
tkMessageBox | 用于显示你应用程序的消息框。 |
5.标准属性
Dimension | 控件大小; |
---|---|
Color | 控件颜色; |
Font | 控件字体; |
Anchor | 锚点; |
Relief | 控件样式; |
Bitmap | 位图; |
Cursor | 光标; |
6.几何管理
pack() | 包装; |
---|---|
grid() | 网格; |
place() | 位置; |
进制转换
-二进制:bin()
-八进制:oct()
-十六进制:hex()
-其他进制转变十进制:int('1010',2)
原码反码补码
-原码:原码 = 符号位 + 真值 (真值:数字绝对值的二进制)(符号位:最高位表示符号位(0表示正,1表示负))
-反码:负数的反码 - 原码符号位不变,其他位取反;正数就是原码
-补码:负数的补码 - 反码加一;正数就是原码
浮点数二进制
-格式:float : 符号位(首位)、指数位(8位)、尾数(23位)
-方法:
整数部分:除以2,取出余数,商继续除以2,直到得到0为止,将取出的余数逆序
小数部分:乘以2,然后取出整数部分,将剩下的小数部分继续乘以2,然后再取整数部分,一直取到小数部分为零为止。
英文编码
-ord():ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
-for语句:
中文编码
-unicode:统一码,也叫万国码、单一码(Unicode)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。一个 Unicode 字符串就是一串代码点序列,这些代码点的数值范围为:0 - 0x10ffff。这串序列需要用内存中一系列字节(意思是,取值在0 - 255 之间)来表示。将 Unicode 字符串转换成一系列字节串的规则就称为编码。
-utf-8:UTF-8 是最广泛使用的编码方式之一。UTF表示“统一码转换格式”(Unicode Transformation Format), 8 的意思是编码中使用 8 位 (8 bit)数字。
-utf-8规则:
-如果代码点小于 128,用相应的字节值表示该 Unicode 字符
-如果代码点在 128 到 0x7ff之间,这类代码点被转换成字节值在 128 - 255 之间的两个字节值。
-代码点大于 0x7ff,这类 代码点对应的 Unicode 将使用 3 - 4 个字节序列表示, 序列中每个字节的值都在 128 - 255 范围内。
-详细参考http://blog.csdn.net/qq_26886929/article/details/53993823
代码
import tkinter as tk
from tkinter.messagebox import showinfo
import unicodedata
import sys
window = tk.Tk()
window.title('编码解码')
window.geometry('400x500')
l = tk.Label(window,text='请选择你想要解码的数据类型',bg='white',width=30,height=2)
l.pack()
def number_zheng():
a = eval(input("请输入一个整数:"))
if a <= 0:
print("二进制:",bin(-int(a)),'八进制:',oct(-int(a)),'十六进制:',hex(-int(a)))
print("原码为:",'1'+bin(a)[3:])
print("反码为:",'1'+bin(2**(len(bin(a)[3:])+1)-1+a)[3:])
print("反码为:",'1'+bin(2**(len(bin(a)[3:])+1)+a)[3:])
else:
print("二进制:",bin(int(a)),'八进制:',oct(int(a)),'十六进制:',hex(int(a)))
print('原码:',bin(int(a)),'反码:',bin(int(a)),'补码:',bin(int(a)))
def number_xiao():
a = input('请输入')
def binary2(num, digits):
onezero = f'{int(num*2**digits):b}'
return f'{onezero[:-digits]}.{onezero[-digits:]}'
examples = [float(a)]
for e in examples:
print(f'{e:>12.4f} -> {binary2(e, 4):>12}')
def English():
c = input("请输入英文文本")
for i in c:
print(hex(ord(i)))
def Chinese():
name = input("请输入:")
print(name.encode('unicode_escape'))
code = name.encode('unicode_escape')
print(code.decode(('unicode_escape')))
b = tk.Button(window,text='数字整数',width=15,height=2,command=number_zheng)
b.pack()
b = tk.Button(window,text='数字小数',width=15,height=2,command=number_xiao)
b.pack()
b = tk.Button(window,text='英文文本',width=15,height=2,command=English)
b.pack()
b = tk.Button(window,text='中文文本',width=15,height=2,command=Chinese)
b.pack()
window.mainloop()