脚本专家 发表于 2026-7-3 12:00:02

Python进制转换:bin、oct、hex、int内置函数用法与实战

在Python编程中,经常需要处理不同进制之间的转换。Python提供了一系列内置函数,如bin()、oct()、hex()以及int(),可以方便地在十进制、二进制、八进制、十六进制之间进行转换。本文将深入介绍这些函数的用法、参数含义及实际应用场景,并提供一个通用进制转换函数。

一、十进制转其他进制

1. bin() - 十进制转二进制
bin()函数接收一个十进制整数,返回以“0b”为前缀的二进制字符串。例如:

decimal_num = 10
binary_str = bin(decimal_num)
print(binary_str)# 输出: 0b1010

若需要去除前缀,可以使用切片操作:bin(num)。负数转换时,bin()会在结果前添加负号,如bin(-5)返回'-0b101'。

2. oct() - 十进制转八进制
oct()类似地返回以“0o”为前缀的八进制字符串。示例:

decimal_num = 20
print(oct(decimal_num))# 输出: 0o24

对于大数如255,oct(255)返回'0o377'。

3. hex() - 十进制转十六进制
hex()返回以“0x”为前缀的十六进制字符串,字母使用小写。例如:

decimal_num = 255
print(hex(decimal_num))# 输出: 0xff
decimal_num = 170
print(hex(decimal_num))# 输出: 0xaa

需要注意的是,这些函数都只接受整数作为参数。

二、其他进制转十进制

int()函数可以接收两个参数:字符串和表示该字符串原始进制的整数(base)。例如二进制转十进制:

binary_str = "1010"
decimal = int(binary_str, 2)
print(decimal)# 输出: 10

同理,八进制字符串转十进制:int("24", 8)返回20;十六进制转十进制:int("ff", 16)返回255。

如果字符串包含进制前缀(如“0b”、“0o”、“0x”),可以将base参数设为0,让Python自动检测进制。例如:

int("0b1010", 0)   # 10
int("0o24", 0)   # 20
int("0xff", 0)   # 255

这种方式在处理带前缀的输入时非常方便。

三、任意进制之间的转换

Python没有直接提供从任意进制到任意进制的内置函数。可以通过“十进制作为中间进制”的方式实现。下面是一个通用转换函数:

def convert_base(number_str, from_base, to_base):
    # 先转换到十进制
    decimal = int(number_str, from_base)
    # 再从十进制转换到目标进制
    if to_base == 2:
      return bin(decimal)
    elif to_base == 8:
      return oct(decimal)
    elif to_base == 16:
      return hex(decimal)
    elif to_base == 10:
      return str(decimal)
    else:
      raise ValueError("不支持的进制")

使用示例:

# 二进制转八进制
print(convert_base("1010", 2, 8))   # 输出: 0o12
# 十六进制转二进制
print(convert_base("ff", 16, 2))    # 输出: 0b11111111
# 八进制转十六进制
print(convert_base("377", 8, 16))   # 输出: 0xff

另一种方式是使用内置的format()函数进行格式化输出。format()可以指定格式说明符,如'b'(二进制)、'o'(八进制)、'x'(小写十六进制)、'X'(大写十六进制)。加前缀则使用'#b'、'#o'、'#x'等。

num = 255
print(format(num, 'b'))   # 11111111
print(format(num, 'o'))   # 377
print(format(num, 'x'))   # ff
print(format(num, '#x'))# 0xff


四、实际应用场景

1. 颜色值转换
在Web开发中,经常需要将RGB颜色值转换为十六进制字符串。以下实现直接使用format():

def rgb_to_hex(r, g, b):
    return f"#{format(r, '02x')}{format(g, '02x')}{format(b, '02x')}"

print(rgb_to_hex(255, 128, 0))# 输出: #ff8000

反向转换则利用int()解析十六进制子串:

def hex_to_rgb(hex_color):
    hex_color = hex_color.lstrip('#')
    r = int(hex_color, 16)
    g = int(hex_color, 16)
    b = int(hex_color, 16)
    return r, g, b

print(hex_to_rgb("#ff8000"))# 输出: (255, 128, 0)


2. 文件权限处理
Linux系统中,文件权限常用rwx字符串或八进制数字表示。自定义函数可将rwx字符串转换为八进制:

def permissions_to_octal(perm_string):
    perm_dict = {'r': 4, 'w': 2, 'x': 1, '-': 0}
    octal = 0
    for i, char in enumerate(perm_string):
      octal += perm_dict * (8 ** (2 - i))
    return oct(octal)

print(permissions_to_octal("rwxr-xr--"))# 输出: 0o754


3. 网络编程中的IP地址处理
将IP地址转换为二进制表示,有助于理解子网掩码等概念:

def ip_to_binary(ip):
    parts = ip.split('.')
    binary_parts =
    return '.'.join(binary_parts)

print(ip_to_binary("192.168.1.1"))# 输出: 11000000.10101000.00000001.00000001


总结
本文详细介绍了Python内置的进制转换函数bin()、oct()、hex()、int()以及format()的使用方法和参数细节,并提供了通用转换函数及实际应用代码。掌握这些工具,可以高效处理各种进制转换需求,适用于数据处理、系统编程、网络通信等场景。

热心网友1 发表于 2026-7-3 12:10:00

Re: Python进制转换:bin、oct、hex、int内置函数用法与实战

感谢楼主的详细分享!这篇教程把Python内置的进制转换函数讲得很清楚,特别是int()带base参数自动检测前缀的技巧很实用,之前一直手动去掉前缀再转换,现在方便多了。 那个通用转换函数convert_base也很棒,以十进制为中间桥接的思路简洁明了。自己平时写颜色转换时常用format()的'02x'格式化,确实比手动拼串省事不少。另外提一个补充:对于二进制、八进制、十六进制字符串去除前缀,用切片或lstrip('0x')等方式都行,但用int('0b1010', 0)自动检测更优雅。 楼主提到的文件权限转换例子也很有启发性,之前没想过用这种字典映射的方式将rwx字符串转八进制。谢谢分享,收藏了!

热心网友1 发表于 2026-7-3 12:10:00

Re: Python进制转换:bin、oct、hex、int内置函数用法与实战

这篇帖子整理得很全面啊!bin、oct、hex和int的用法讲得很清楚,特别是int(string, base)自动检测前缀的那个技巧,平时用文档查一下也能找到,但这样总结出来方便多了。 那个通用转换函数和format()的对比也很有用,平时我写颜色转换都是自己拼字符串,看到rgb_to_hex那个例子,直接用format加'02x'的格式,简洁多了。还有文件权限那个部分,把rwx映射成八进制数字,思路很巧妙,之前没这么想过。谢谢分享!

热心网友1 发表于 2026-7-3 12:10:00

Re: Python进制转换:bin、oct、hex、int内置函数用法与实战

您好,楼主整理得很详细,函数用法和代码示例都很实用。特别是那个`convert_base`通用函数,作为中间进制转换的思路很清晰。RGB和文件权限的例子也直接能用,保存下来以后写脚本时可以快速参考。谢谢分享!
页: [1]
查看完整版本: Python进制转换:bin、oct、hex、int内置函数用法与实战