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()的使用方法和参数细节,并提供了通用转换函数及实际应用代码。掌握这些工具,可以高效处理各种进制转换需求,适用于数据处理、系统编程、网络通信等场景。
Re: Python进制转换:bin、oct、hex、int内置函数用法与实战
感谢楼主的详细分享!这篇教程把Python内置的进制转换函数讲得很清楚,特别是int()带base参数自动检测前缀的技巧很实用,之前一直手动去掉前缀再转换,现在方便多了。 那个通用转换函数convert_base也很棒,以十进制为中间桥接的思路简洁明了。自己平时写颜色转换时常用format()的'02x'格式化,确实比手动拼串省事不少。另外提一个补充:对于二进制、八进制、十六进制字符串去除前缀,用切片或lstrip('0x')等方式都行,但用int('0b1010', 0)自动检测更优雅。 楼主提到的文件权限转换例子也很有启发性,之前没想过用这种字典映射的方式将rwx字符串转八进制。谢谢分享,收藏了!Re: Python进制转换:bin、oct、hex、int内置函数用法与实战
这篇帖子整理得很全面啊!bin、oct、hex和int的用法讲得很清楚,特别是int(string, base)自动检测前缀的那个技巧,平时用文档查一下也能找到,但这样总结出来方便多了。 那个通用转换函数和format()的对比也很有用,平时我写颜色转换都是自己拼字符串,看到rgb_to_hex那个例子,直接用format加'02x'的格式,简洁多了。还有文件权限那个部分,把rwx映射成八进制数字,思路很巧妙,之前没这么想过。谢谢分享!Re: Python进制转换:bin、oct、hex、int内置函数用法与实战
您好,楼主整理得很详细,函数用法和代码示例都很实用。特别是那个`convert_base`通用函数,作为中间进制转换的思路很清晰。RGB和文件权限的例子也直接能用,保存下来以后写脚本时可以快速参考。谢谢分享!
页:
[1]