Python 3.6.4进制转换程序报错:invalid literal for int() with base32
解决Python中输入转十进制的报错问题
嘿,我来帮你搞定这个报错!你遇到的问题核心是混淆了32进制数字和Base32编码两个完全不同的概念,导致int()函数根本认不出你的输入内容。
为什么会报错?
Python的int(string, base=32)函数要求输入的是32进制数字的合法字符串:
- 允许的字符只有0-9、A-V(大小写都行),因为32进制总共需要32个符号(0对应0,9对应9,A对应10,一直到V对应31)。
- 而你的输入
MJQXGZJAGMZA====是标准的Base32编码字符串(末尾的等号是Base32的填充符),里面不仅有32进制不允许的Z,还有完全不属于数字符号的等号,int()当然会报错啦。
两种解决方案,看你需求选
情况1:你实际想解码Base32编码内容再转十进制
如果你的输入是Base32编码的数据(从带等号的格式来看,大概率是这种情况),得先解码成字节,再转成十进制整数:
import base64 # 读取文件内容 with open('input.txt', 'r') as f: base32_input = f.read().strip() # 解码Base32为字节 decoded_data = base64.b32decode(base32_input) # 把字节转成十进制整数(默认大端模式,符合常规编码逻辑) decimal_result = int.from_bytes(decoded_data, byteorder='big') print(decimal_result)
情况2:你确实要处理32进制数字字符串
如果你的输入本来应该是32进制数字,但不小心混入了Base32的填充符或非法字符,得先清理输入再转换:
# 读取配置和输入 with open('base.txt', 'r') as f: target_base = int(f.read().strip()) with open('input.txt', 'r') as f: raw_input = f.read().strip() # 第一步:移除填充符等号 cleaned_input = raw_input.replace('=', '') # 第二步:检查所有字符是否在32进制允许范围内 allowed_chars = set('0123456789ABCDEFGHIJKLMNOPQRSTUVabcdefghijklmnopqrstuv') if not all(char in allowed_chars for char in cleaned_input): raise ValueError("输入包含32进制不支持的字符,请检查!") # 转换为十进制 decimal_result = int(cleaned_input, base=target_base) print(decimal_result)
最后提醒
先明确你的真实需求:是要解码Base32编码的数据,还是要把32进制数字转成十进制?从输入的格式来看,前者的可能性更大哦。
内容的提问来源于stack exchange,提问作者brainfuck best language
相关产品推荐
相关产品推荐

