python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python进制转换

Python实现不同进制间转换的常用内置函数详解

作者:老师好,我是刘同学

Python提供了多种内置函数来实现不同进制之间的转换,主要包括bin()oct()hex()和int()等函数,下面将详细介绍这些方法的使用方式和实际应用场景,有需要的小伙伴可以了解下

Python提供了多种内置函数来实现不同进制之间的转换,主要包括bin()oct()hex()int()等函数。下面将详细介绍这些方法的使用方式和实际应用场景。

1. 十进制转其他进制

1.1 bin() - 十进制转二进制

bin()函数将十进制整数转换为二进制字符串,返回的字符串以 0b为前缀。

# 十进制转二进制示例
decimal_num = 10
binary_str = bin(decimal_num)
print(f"十进制 {decimal_num} 转二进制: {binary_str}")  # 输出: 0b1010

# 去除前缀的二进制表示
binary_clean = bin(decimal_num)[2:]
print(f"去除前缀的二进制: {binary_clean}")  # 输出: 1010

# 负数转换示例
negative_num = -5
print(f"负数 {negative_num} 的二进制: {bin(negative_num)}")  # 输出: -0b101

1.2 oct() - 十进制转八进制

oct()函数将十进制整数转换为八进制字符串,返回的字符串以 0o为前缀。

# 十进制转八进制示例
decimal_num = 20
octal_str = oct(decimal_num)
print(f"十进制 {decimal_num} 转八进制: {octal_str}")  # 输出: 0o24

# 去除前缀的八进制表示
octal_clean = oct(decimal_num)[2:]
print(f"去除前缀的八进制: {octal_clean}")  # 输出: 24

# 大数转换示例
large_num = 255
print(f"大数 {large_num} 的八进制: {oct(large_num)}")  # 输出: 0o377

1.3 hex() - 十进制转十六进制

hex()函数将十进制整数转换为十六进制字符串,返回的字符串以 0x为前缀,字母部分使用小写。

# 十进制转十六进制示例
decimal_num = 255
hex_str = hex(decimal_num)
print(f"十进制 {decimal_num} 转十六进制: {hex_str}")  # 输出: 0xff

# 去除前缀的十六进制表示
hex_clean = hex(decimal_num)[2:]
print(f"去除前缀的十六进制: {hex_clean}")  # 输出: ff

# 包含字母的十六进制示例
decimal_num = 170
print(f"十进制 {decimal_num} 的十六进制: {hex(decimal_num)}")  # 输出: 0xaa

2. 其他进制转十进制

2.1 int()函数的基本用法

int()函数可以将其他进制的字符串转换为十进制整数,通过第二个参数指定原始进制。

# 二进制转十进制
binary_str = "1010"
decimal_num = int(binary_str, 2)
print(f"二进制 {binary_str} 转十进制: {decimal_num}")  # 输出: 10

# 八进制转十进制
octal_str = "24"
decimal_num = int(octal_str, 8)
print(f"八进制 {octal_str} 转十进制: {decimal_num}")  # 输出: 20

# 十六进制转十进制
hex_str = "ff"
decimal_num = int(hex_str, 16)
print(f"十六进制 {hex_str} 转十进制: {decimal_num}")  # 输出: 255

2.2 带前缀的字符串转换

int()函数也可以处理带前缀的进制字符串:

# 带前缀的二进制转十进制
binary_with_prefix = "0b1010"
decimal_num = int(binary_with_prefix, 0)  # 使用0让Python自动检测进制
print(f"带前缀二进制转十进制: {decimal_num}")  # 输出: 10

# 带前缀的八进制转十进制
octal_with_prefix = "0o24"
decimal_num = int(octal_with_prefix, 0)
print(f"带前缀八进制转十进制: {decimal_num}")  # 输出: 20

# 带前缀的十六进制转十进制
hex_with_prefix = "0xff"
decimal_num = int(hex_with_prefix, 0)
print(f"带前缀十六进制转十进制: {decimal_num}")  # 输出: 255

3. 任意进制之间的转换

3.1 通过十进制作为中间进制

要实现任意进制之间的转换,可以先将原始进制转换为十进制,再从十进制转换到目标进制:

def convert_base(number, from_base, to_base):
    """
    通用进制转换函数
    :param number: 要转换的数字(字符串形式)
    :param from_base: 原始进制
    :param to_base: 目标进制
    :return: 转换后的字符串
    """
    # 先转换为十进制
    decimal_num = int(number, from_base)
    
    # 再从十进制转换到目标进制
    if to_base == 2:
        return bin(decimal_num)
    elif to_base == 8:
        return oct(decimal_num)
    elif to_base == 16:
        return hex(decimal_num)
    elif to_base == 10:
        return str(decimal_num)
    else:
        raise ValueError("不支持的进制")

# 二进制转八进制
binary_to_octal = convert_base("1010", 2, 8)
print(f"二进制 1010 转八进制: {binary_to_octal}")  # 输出: 0o12

# 十六进制转二进制
hex_to_binary = convert_base("ff", 16, 2)
print(f"十六进制 ff 转二进制: {hex_to_binary}")  # 输出: 0b11111111

# 八进制转十六进制
octal_to_hex = convert_base("377", 8, 16)
print(f"八进制 377 转十六进制: {octal_to_hex}")  # 输出: 0xff

3.2 使用format函数进行格式化输出

format()函数提供了更灵活的进制转换方式,可以控制输出格式:

# 使用format进行进制转换
num = 255

# 二进制格式化
binary_format = format(num, 'b')
print(f"format二进制: {binary_format}")  # 输出: 11111111

# 八进制格式化
octal_format = format(num, 'o')
print(f"format八进制: {octal_format}")  # 输出: 377

# 十六进制格式化(小写)
hex_lower = format(num, 'x')
print(f"format十六进制(小写): {hex_lower}")  # 输出: ff

# 十六进制格式化(大写)
hex_upper = format(num, 'X')
print(f"format十六进制(大写): {hex_upper}")  # 输出: FF

# 带前缀的格式化
binary_with_prefix = format(num, '#b')
print(f"带前缀二进制: {binary_with_prefix}")  # 输出: 0b11111111

4. 函数对比与选择指南

下表总结了各进制转换函数的特点和适用场景:

函数功能返回值前缀适用场景示例
bin(x)十进制转二进制///
0b`位运算、硬件编程bin(10) → '0b1010'//
oct(x)十进制转八进制///
0o`文件权限、Unix系统oct(64) → '0o100'//
hex(x)十进制转十六进制///
0x`内存地址、颜色代码hex(255) → '0xff'//
int(x, base)其他进制转十进制通用转换、数据解析int('1010', 2) → 10
format(x, spec)格式化转换可选自定义输出、显示格式format(10, 'b') → '1010'

5. 实际应用场景

5.1 颜色值转换

# RGB颜色值转换
def rgb_to_hex(r, g, b):
    """将RGB颜色值转换为十六进制"""
    return f"#{format(r, '02x')}{format(g, '02x')}{format(b, '02x')}"

# 使用示例
color_hex = rgb_to_hex(255, 128, 0)
print(f"RGB(255,128,0) 转十六进制: {color_hex}")  # 输出: #ff8000

# 反向转换
def hex_to_rgb(hex_color):
    """将十六进制颜色值转换为RGB"""
    hex_color = hex_color.lstrip('#')
    r = int(hex_color[0:2], 16)
    g = int(hex_color[2:4], 16)
    b = int(hex_color[4:6], 16)
    return r, g, b

rgb_values = hex_to_rgb("#ff8000")
print(f"十六进制 #ff8000 转RGB: {rgb_values}")  # 输出: (255, 128, 0)

5.2 文件权限处理

# Linux文件权限转换
def permissions_to_octal(perm_string):
    """将rwx权限字符串转换为八进制"""
    perm_dict = {'r': 4, 'w': 2, 'x': 1, '-': 0}
    octal_value = 0
    
    for i, char in enumerate(perm_string):
        octal_value += perm_dict[char] * (8 ** (2 - i))
    
    return oct(octal_value)

# 使用示例
file_perm = "rwxr-xr--"
octal_perm = permissions_to_octal(file_perm)
print(f"权限 {file_perm} 的八进制表示: {octal_perm}")  # 输出: 0o754

5.3 网络编程中的IP地址处理

# IP地址转换
def ip_to_binary(ip_address):
    """将IP地址转换为二进制表示"""
    parts = ip_address.split('.')
    binary_parts = [format(int(part), '08b') for part in parts]
    return '.'.join(binary_parts)

# 使用示例
ip = "192.168.1.1"
binary_ip = ip_to_binary(ip)
print(f"IP地址 {ip} 的二进制表示: {binary_ip}")  # 输出: 11000000.10101000.00000001.00000001

通过掌握这些进制转换方法,您可以在数据处理、系统编程、网络通信等多个领域灵活应用,提高编程效率和代码质量。

到此这篇关于Python实现不同进制间转换的常用内置函数详解的文章就介绍到这了,更多相关Python进制转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文