基于Python设计的进制转换器,可以在10进制数、16进制数、2进制数之间相互转换。亮点:16进制数/2进制数可转换为有符号数整型。
缘由:某日在解码下位机传回来的数据时,发现找到的进制转换工具都是将16进制数当成无符号数转换的10进制,找不到有符号数的转换工具,遂,自己动手搓一个。于是诞生了这个。
本人不保证该作品没有bug,也没有经过严谨的测试验证,在任何情况下,无论因何种原因,本人均不承担因使用本程序或者代码所造成的任何直接、间接、特别、附带或间接损失的赔偿责任。
一、使用说明
- 双击 “
Base_Conversion.exe
” ,运行程序,会弹出程序窗口。 - 按照你的需求填写数据,点击计算即可显示结果。亮点:16进制数/2进制数可转换为有符号数整型。
- 程序界面如下:
URL:https://gitee.com/zerone_space/BaseConv
下载:https://gitee.com/zerone_space/crc16_calculator/releases/tag/v1.0.1-beta
二、源码使用[only for programmer]
1、安装python
2、下载源码
git clone https://gitee.com/zerone_space/BaseConv.git
cd BaseConv
3、测试、运行
python Base_Conversion.py
4、打包
4.1、安装虚拟环境
pip install pipenv
Tips:首次使用需要
pipenv
安装
4.2、进入虚拟环境
pipenv shell
4.3、在虚拟环境中安装 pyinstaller
打包工具
pip install pyinstaller -i https://pypi.doubanio.com/simple --trusted-host pypi.doubanio.com
Tips:每次重新打包都需要安装
4.4、在虚拟环境中使用pyinstaller
打包成可执行文件(.exe)
pyinstaller -F -w -i logo.ico ./src/Base_Conversion.py
4.5、完成打包,退出虚拟环境,再删除虚拟环境
exit
pipenv --rm
Tips:不删除虚拟环境也是可以的,这样下次重新打包,
则不需要重新安装pyinstaller
附录
from tkinter import *
from tkinter import messagebox
from tkinter.ttk import Combobox
import re
#font_str = "Times New Roman"
font_str = "阿里巴巴普惠体"
#font_str = "Source Han Sans CN"
def hexfmt(str):
str = re.sub(r'[^0-9a-fA-F]','',str)# 16进制数正则
if len(str)==0:
str='0'
print('HEX: '+str)
return str
def decfmt(str):
str = re.sub(r'[^-?\d+$]','',str)# 十进制数正则
if len(str)==0:
str="00"
print('DEC: '+str)
return str
def binfmt(str):
str = re.sub(r'[^0-1]','',str)# 二进制数正则
if len(str)==0:
str='00000000'
print('BIN: '+str)
return str
def sdec2int(intstr,signed):
#str = str.strip("-")
if signed== 1:
if intstr >=0:
if intstr < 128:
binstr = '{:08b}'.format(intstr)
elif intstr < 32768:
binstr = '{:016b}'.format(intstr)
elif intstr < 2147483648:
binstr = '{:032b}'.format(intstr)
else:
binstr = '{:064b}'.format(intstr)
else:
#print (intstr)
str_num = hex(intstr).strip("-")
#print (str_num)
abs = int(str_num,16)
if -128 <= intstr:
binstr = '{:08b}'.format(abs)
elif -32768 <= intstr:
binstr = '{:016b}'.format(abs)
elif -2147483648 <= intstr:
binstr = '{:032b}'