当前位置:首页 > Python > 正文

Python整数进制转换教程 - 从二进制到十六进制转换指南

Python整数进制转换教程

全面掌握二进制、八进制、十进制和十六进制之间的相互转换

进制系统简介

在计算机科学中,常用的进制系统包括:

  • 二进制 (Base-2) - 由0和1组成,计算机底层使用
  • 八进制 (Base-8) - 由0-7组成,在Unix系统中使用
  • 十进制 (Base-10) - 由0-9组成,人类日常使用的数字系统
  • 十六进制 (Base-16) - 由0-9和A-F组成,用于表示内存地址和颜色值

Python内置进制转换函数

十进制转二进制 - bin()

# 十进制转二进制
num = 42
binary = bin(num)
print(binary)  # 输出: 0b101010

# 去掉前缀
print(bin(num)[2:])  # 输出: 101010

十进制转八进制 - oct()

# 十进制转八进制
num = 42
octal = oct(num)
print(octal)  # 输出: 0o52

# 去掉前缀
print(oct(num)[2:])  # 输出: 52

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

# 十进制转十六进制
num = 42
hexadecimal = hex(num)
print(hexadecimal)  # 输出: 0x2a

# 去掉前缀
print(hex(num)[2:])  # 输出: 2a

其他进制转十进制 - int()

# 二进制转十进制
binary_str = "101010"
decimal = int(binary_str, 2)
print(decimal)  # 输出: 42

# 八进制转十进制
octal_str = "52"
decimal = int(octal_str, 8)
print(decimal)  # 输出: 42

# 十六进制转十进制
hex_str = "2a"
decimal = int(hex_str, 16)
print(decimal)  # 输出: 42

任意进制之间的转换

Python可以通过十进制作为中间步骤实现任意进制之间的转换:

二进制转十六进制

# 二进制转十六进制
binary_str = "101010"
decimal_num = int(binary_str, 2)
hex_num = hex(decimal_num)
print(hex_num)  # 输出: 0x2a

十六进制转二进制

# 十六进制转二进制
hex_str = "2a"
decimal_num = int(hex_str, 16)
binary_num = bin(decimal_num)
print(binary_num)  # 输出: 0b101010

八进制转十六进制

# 八进制转十六进制
octal_str = "52"
decimal_num = int(octal_str, 8)
hex_num = hex(decimal_num)
print(hex_num)  # 输出: 0x2a

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

format()函数提供了一种更灵活的进制转换方法:

num = 255

# 格式化为二进制(不带前缀)
print(format(num, 'b'))  # 输出: 11111111

# 格式化为八进制(不带前缀)
print(format(num, 'o'))  # 输出: 377

# 格式化为十六进制(不带前缀)
print(format(num, 'x'))  # 输出: ff

# 格式化为十六进制(大写)
print(format(num, 'X'))  # 输出: FF

# 带前缀的格式化
print(format(num, '#b'))  # 输出: 0b11111111
print(format(num, '#o'))  # 输出: 0o377
print(format(num, '#x'))  # 输出: 0xff
print(format(num, '#X'))  # 输出: 0XFF

实际应用场景

1. 网络编程中的IP地址处理

# 将IP地址转换为32位二进制
ip = "192.168.1.1"
binary_ip = ''.join([bin(int(x)+256)[3:] for x in ip.split('.')])
print(binary_ip)  # 输出: 11000000101010000000000100000001

2. 颜色值转换

# 十六进制颜色值转RGB
hex_color = "#FF5733"
r = int(hex_color[1:3], 16)
g = int(hex_color[3:5], 16)
b = int(hex_color[5:7], 16)
print(f"RGB: ({r}, {g}, {b})")  # 输出: RGB: (255, 87, 51)

3. 权限管理系统(Unix风格)

# 八进制权限转字符串表示
def permission_string(octal_perm):
    perm_str = ""
    perm_map = {'0': '---', '1': '--x', '2': '-w-', '3': '-wx',
                '4': 'r--', '5': 'r-x', '6': 'rw-', '7': 'rwx'}
    for digit in str(octal_perm):
        perm_str += perm_map[digit]
    return perm_str

print(permission_string(755))  # 输出: rwxr-xr-x
print(permission_string(644))  # 输出: rw-r--r--

进制转换速查表

十进制 二进制 八进制 十六进制
0 0 0 0
1 1 1 1
2 10 2 2
8 1000 10 8
10 1010 12 A
15 1111 17 F
16 10000 20 10
255 11111111 377 FF

总结

  • Python提供了内置函数bin(), oct(), hex()用于十进制转其他进制
  • int()函数可以将字符串从任意进制转换为十进制
  • 使用format()函数可以更灵活地控制进制转换的输出格式
  • 不同进制转换的结果通常包含前缀(0b, 0o, 0x),可以使用切片操作去除
  • 进制转换在IP地址处理、颜色值转换、权限管理等场景有广泛应用

© 2023 Python进制转换教程 | 掌握Python中的整数进制转换方法

发表评论