最近,我仿照https://blog.csdn.net/Eyizoha/article/details/94897931?locationNum=9&fps=1上的2-36进制转换的代码做出了一个更强的2-62进制转换工具,不仅可以进行普通的进制转换,还可以直接进行不同进制计算,代码如下(Python3):

from decimal import *
getcontext().prec = 1000
def trans(num): # 输入数字换为字母或输入字母转换为数字if type(num) == int:if num < 10:return str(num)elif num < 36:return chr(ord('a') + num - 10)else:return chr(ord('A') + num - 36)else:if num.isdigit():return int(num)elif num.islower():return ord(num) - ord('a') + 10elif num.isupper():return ord(num) - ord('A') + 36def check(num, base, target): # 待转换数字,当前进制,目标进制if type(base) is not int or base < 2 or base > 62 or type(target) is not int or target < 2 or target > 62:print('非法进制数!')return Falseif type(num) is int or type(num) is Decimal:num = str(num)elif type(num) is str and len(num) != 0:num = numelse:print('非数字输入!')return Falseif num.count('.') > 1:print('多个小数点!')return Falseif not num.replace('.', '').isalnum():print('含有其他字符!')return Falsefor c in num.replace('.', ''):if trans(c) >= base:print('字符超过进制允许!')return Falsewhile len(num) > 1:if num[0] == '0' and num[1] != '.':num = num[1:]else:breakreturn numdef basechange(num, base, target, precision=8): # 待转换数字,当前进制,目标进制,精度num = check(num, base, target)if num is False:return Nonepoint = num.find('.')if point == -1:point = len(num)radix = num.replace('.', '')if target == 10:int_part = radix[:point][::-1]frac_part = radix[point:]s = 0ss = 0for i in range(len(int_part)):s += trans(int_part[i]) * base ** ifor i in range(len(frac_part)):ss += trans(frac_part[i]) / base ** (i+1)return str(s) + str(ss)[1:]elif base == 10:int_part = int(radix[:point])frac_part = Decimal('0.'+radix[point:])s = ''while True:s += trans(int_part % target)int_part //= targetif int_part == 0:breaks = s[::-1]if frac_part != 0:s += '.'ct = 0while frac_part != 0 and ct < precision:frac_part *= targets += trans(int(frac_part))frac_part -= int(frac_part)ct += 1return selse:return basechange(basechange(num, base, 10, precision=precision), 10, target, precision=precision)def abpl(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)+Decimal(b),10,target,1000) #加法def absu(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)-Decimal(b),10,target,100) #减法def abmu(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)*Decimal(b),10,target,100) #乘法def abdi(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)/Decimal(b),10,target,100) #除法def abpo(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)**Decimal(b),10,target,100) #乘方def abrt(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)**Decimal(1/Decimal(b)),10,target,100) #开方def abfl(num1,base1,num2,base2,target):a,b=basechange(num1, base1, 10, 1000),basechange(num2, base2, 10, 1000)return basechange(Decimal(a)//Decimal(b),10,target,100) #除法

以下是演示:

abpo(2,10,100,10,62)
'qADiGrP0AKRA2S8Uw'
abmu('acc',62,'python',62,10)
'917683977345620'
abrt(2,10,100,10,62)
'1.0qJHxLPX0S8850kC42G0iHHAWSopXPjVS0okYnGj5tINlPl6xyZ7j4nBqCcrjw7q5Stze0ppJMJ5rGcETWKEqsZMjj80gBUIqTke'

但存在一些缺陷,例如:

abpo('gig',62,100,62,62)
含有其他字符!
abpo(31,10,800,10,62)
含有其他字符!

这是因为当数字较大的时候,可能会使用科学计数法(有一个+号)。
希望日后可以改进。

更强更方便的进制转换工具相关推荐

  1. ASCII HEX BIN DIG进制转换工具页

    ASCII  HEX BIN DIG进制转换工具页 http://www.ab126.com/goju/1711.html

  2. JavaScript实现在线进制转换工具网站 -toolfk程序员在线工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  3. 在线2-36任意进制转换工具

    在线2-36任意进制转换工具 在线2-36任意进制转换工具 本工具支持将数字从在2-36进制中任意进制间相互转换,只支持整数,纯客户端实时计算. https://tooltt.com/hex/

  4. JavaScript实现在线进制转换工具网站 -toolfk程序员工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  5. Java 进制转换工具类

    /*** 进制转换工具类* @author dell**/ public class HexadecimalUtil {/*** 获得倒序二进制数据* @param hexString* @retur ...

  6. java 进制转换工具_进制转换工具(JAVA)

    /**进制转换工具,支持2-36任意进制间相互转换 */ public class HexConverter { public static String Quotient = null; publi ...

  7. 通用进制转换工具,可实现进制之间的任意转换

    通用进制转换工具,可实现2进制,8进制,10进制,16进制之间的任意转换 以下是软件截图: 以下是软件下载地址: http://download.csdn.net/source/3371415 转载于 ...

  8. Android开发实用小工具十——进制转换工具

    文章目录 前言 一.效果展示 二.代码 1.样式布局 2.主代码 总结 前言 进制转换工具的开发与实现. 一.效果展示 二.代码 准备工作与我开发的另一个小工具(长度转换工具)所用一致,详情请看我上一 ...

  9. java:实现进制转换工具(附完整源码)

    java:实现进制转换工具 package com.xxq;import java.awt.BorderLayout; import java.awt.EventQueue;import javax. ...

最新文章

  1. 【其他】将幕布文章OPML转换为Markdown的方法
  2. Java项目:学生学科竞赛管理管理系统设计和实现(java+springboot+ssm+maven)
  3. Asterisk安装
  4. 关于学习Python的一点学习总结(42->继承list)
  5. 如何用sqlyog实现远程连接mysql
  6. python游戏服务器引擎_KBEngine游戏服务器引擎环境配置
  7. hive hql文档_30分钟入门 Hive SQL(HQL 入门篇)
  8. Java实例_综合实践3.K-Means聚类算法
  9. python3super用法_Python3中的super()函数详解
  10. 【编程语言】Kotlin之object关键字
  11. HBase Filter及对应Shell
  12. iphone 添加网易邮箱(126/163)踩坑(ios16)
  13. 国外漂亮html5网页设,高端大气上档次!10个精美的国外HTML5网站欣赏_html/css_WEB-ITnose...
  14. XSS网站漏洞如何修复 大牛支招让您网站更安全
  15. python_while 循环_珠穆朗玛峰
  16. vscode 实时运行代码插件 Quokka
  17. 怎么画一点透视,两点透视,三点透视
  18. skip-gram 学习笔记
  19. 预付费售电管理系统的构建及应用
  20. python求excel平均数_#python抓取excel表格数据#使用python3读取处理excel表的数据内容如何对内容求平均值...

热门文章

  1. scp复制多个文件及通配符问题
  2. WPS Word中怎么打出拼音和声调让别人懂的这个字怎么读
  3. iTunes备份目录转移
  4. java 文件遍历排序_Java的二叉树排序以及遍历文件展示文本格式的文件树
  5. 华为手机怎样恢复Android,华为手机怎么恢复出厂设置 华为恢复出厂设置的两种方法...
  6. Nginx Rewrite 正则表达式
  7. 终极议程!火星财经开启12小时不间断视频直播直击Filecoin主网上线
  8. vscode html注释快捷键_宇宙最强vscode教程(基础篇)
  9. illustrator插件-将位图矢量化-转为SVG-AI插件-临摹-范例
  10. ida 调试android之路