Python中不同进制间的转换实现

Finn
Finn
发布时间:2026-10-11| 1人浏览过
原创

本文详解Python中的进制转换方法。通过bin()、oct()、hex()及int()内置函数可快速实现十进制与二、八、十六进制互转。同时结合取余整除与加权求和原理,提供完整的自定义转换函数代码,帮助开发者掌握底层逻辑并直接应用于项目计算。

利用内置函数快速转换常见进制

在Python开发中,系统已封装好基础的进制转换接口,适用于常规的数据格式化与日志解析场景。直接调用对应方法即可获取带前缀的标准字符串或整数结果。

将十进制整数转为其他进制字符串:

  • bin(x):返回以 '0b' 开头的二进制字符串。
  • oct(x):返回以 '0o' 开头的八进制字符串。
  • hex(x):返回以 '0x' 开头的十六进制字符串。
print(bin(10))  # 输出: '0b1010'
print(oct(10))  # 输出: '0o12'
print(hex(10))  # 输出: '0xa'

将指定进制的字符串还原为十进制整数:

print(int('1010', 2))   # 二进制字符串转十进制: 10
print(int('12', 8))     # 八进制字符串转十进制: 10
print(int('a', 16))     # 十六进制字符串转十进制: 10

上述函数入口均为内置作用域,传入目标数值或带进制的字符串即可完成转换。当需要精确控制前缀去除或大小写格式时,可结合字符串切片 [2:] 或 .upper() 进一步处理。

十进制转任意进制的取余法实现

内置函数仅覆盖常用进制,若需处理32进制、加密标识生成或底层协议编码,需基于连续取余与整除原理自行构建转换逻辑。该方法的本质是将目标数值不断除以基数,记录每一步的余数作为低位字符,直至商为0后逆序拼接。

第1步:初始化字符映射表与安全边界校验

目的:建立0~9与A~Z的索引对照,防止非法输入导致越界崩溃。
入口:接收待转换的整数 decimal 与目标基数 base。
动作:校验参数类型,限制基数最小值为2,准备结果容器。
参数:decimal (int), base (int)
完成状态:抛出 ValueError 或进入正数计算分支。

def decimal_to_base(decimal, base):
    if not isinstance(decimal, int) or not isinstance(base, int) or base < 2:
        raise ValueError("Invalid inputs")
    digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    if decimal == 0:
        return '0'

第2步:循环执行整除与余数提取

目的:按从低到高的顺序剥离各位数字。
入口:当前商值 decimal。
动作:使用 % 获取余数并通过 // 更新商值,查表获取对应字符并插入结果首部。
参数:remainder, result
完成状态:循环终止时 decimal 归零,result 累积完全部位字符。

    result = ''
    while decimal > 0:
        remainder = decimal % base
        result = digits[remainder] + result
        decimal = decimal // base

第3步:处理负号标记与返回最终字符串

目的:保持原始数据的符号语义。
入口:初始输入的符号状态。
动作:若原始值为负,在结果前追加 '-'。
参数:negative (bool)
完成状态:函数返回符合目标进制规范的文本表示。

    if decimal < 0:
        return '-' + result
    return result

# 调用示例
print(decimal_to_base(10597059, 16)) # 输出: A1B2C3
print(decimal_to_base(10597059, 2))  # 输出: 101000011011001011000011

任意进制转十进制的加权求和实现

反向转换依赖位置权重理论。从左至右(或从右至左)读取每一位字符,将其对应的数值乘以基数的对应次幂,累加后即得到十进制结果。该方法天然具备自校验能力,非合法字符会直接阻断运算。

第1步:预处理输入字符串与权重计数器

目的:统一大小写格式,对齐字符集索引。
入口:number (str), base (int)
动作:转为大写,初始化累加器 decimal 与指数 power。
完成状态:准备好从右向左遍历的迭代环境。

def base_to_decimal(number, base):
    number = number.upper()
    digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    decimal = 0
    power = 0

第2步:逆向遍历并执行乘法累加

目的:按位计算贡献值并汇总。
入口:反转后的字符序列 reversed(number)。
动作:定位字符索引,乘以 base ** power 后累加,指数递增。
参数:digit, power
完成状态:遍历结束,decimal 存储完整十进制值。

    for digit in reversed(number):
        if digit not in digits or digits.index(digit) >= base:
            raise ValueError("Invalid character or out-of-range base")
        decimal += digits.index(digit) * (base ** power)
        power += 1

第3步:校验完整性与返回结果

目的:确保无遗漏处理且数据符合规范。
动作:函数末尾直接返回 decimal。
完成状态:成功返回目标整数,异常输入已在内部拦截。

    return decimal

# 调用示例验证双向一致性
print(base_to_decimal("A1B2C3", 16))    # 输出: 10597059
print(base_to_decimal("50331303", 8))   # 输出: 10597059

总结

日常脚本编写优先使用 bin()、oct()、hex() 与 int() 保证开发效率;遇到复杂基数、高位协议或底层算子实现时,通过取余循环与加权求和可自主掌控转换精度。理解余数拼接方向与幂次增长规律,能有效避免常见的符号错位与越界报错问题。以上就是关于Python进制转换的详细内容,更多关于Python基础开发技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。