文章目录
在代码和计算机科学中,不同进制的数具有特定的 表示特征(前缀或后缀),以便人和编译器能区分它们。Python 提供了非常方便的内置函数来实现这些进制之间的相互转换。
以下是详细的总结:
一、 不同进制在代码中的表示特征
在大部分编程语言(包括 Python、C、Java 等)中,通常使用前缀来表示一个数字字面量属于哪种进制。
| 进制 | 名称 | 前缀 (Python/ 常见语言) | 数码范围 | 示例 |
|---|---|---|---|---|
| 二进制 | Binary | 0b 或 0B | 0, 1 | 0b1010 (代表十进制 10) |
| 八进制 | Octal | 0o 或 0O (零和小写/大写字母o) | 0-7 | 0o12 (代表十进制 10) |
| 十进制 | Decimal | 无前缀 | 0-9 | 10 |
| 十六进制 | Hex | 0x 或 0X | 0-9, a-f (或 A-F) | 0xA (代表十进制 10) |
注意: 这些前缀是写在代码里的。当你把数字作为字符串输入给程序时(例如从文件读取或用户输入),这些字符串可能包含前缀,也可能不包含,需要根据情况处理。
二、 Python 中的进制转换
Python 提供了三大类转换工具:
- 十进制转其他进制 (内置函数)
- 其他进制转十进制 (
int()函数) - 任意进制字符串互转 (自定义或格式化)
1. 十进制 -> 其他进制 (返回字符串)
如果你有一个整数(十进制),想把它变成带前缀的二进制/八进制/十六进制字符串:
num = 42 # 这是一个十进制整数
# 转二进制
bin_str = bin(num)
print(bin_str) # 输出: 0b101010
# 转八进制
oct_str = oct(num)
print(oct_str) # 输出: 0o52
# 转十六进制
hex_str = hex(num)
print(hex_str) # 输出: 0x2a
# 如果不想要前缀,可以使用切片去掉前两个字符,或者用 format()
print(bin(num)[2:]) # 输出: 101010
print(f"{num:b}") # 输出: 101010
2. 其他进制 -> 十进制 (返回整数)
使用 int() 函数,并指定第二个参数 base(基数)。
-
情况 A:字符串 包含 前缀 (0b/0o/0x)
可以将base设置为0,Python 会自动根据前缀判断进制。# 包含前缀的字符串 str_bin = "0b101010" str_oct = "0o52" str_hex = "0x2a" str_dec = "42" # 十进制没有前缀 # 使用 int(string, base=0) -> 自动检测前缀 print(int(str_bin, 0)) # 输出: 42 print(int(str_oct, 0)) # 输出: 42 print(int(str_hex, 0)) # 输出: 42 print(int(str_dec, 0)) # 输出: 42 (因为没有前缀,当做十进制) -
情况 B:字符串 不包含 前缀 (纯数字)
需要明确指定base是多少。# 不包含前缀的字符串 str_bin = "101010" str_oct = "52" str_hex = "2a" # 指定 base 参数 print(int(str_bin, 2)) # 输出: 42 (按二进制解析) print(int(str_oct, 8)) # 输出: 42 (按八进制解析) print(int(str_hex, 16)) # 输出: 42 (按十六进制解析) # 普通十进制 print(int("42")) # 输出: 42 (base默认就是10)
3. 高级格式化 (format() 或 f-string)
如果你需要更灵活的输出格式(例如固定位数、大写字母、无前缀),可以使用 format()。
num = 42
# 不包含前缀,填充到 8 位
print(format(num, "08b")) # 输出: 00101010 (二进制)
print(format(num, "08o")) # 输出: 00000052 (八进制)
print(format(num, "08x")) # 输出: 0000002a (十六进制小写)
print(format(num, "08X")) # 输出: 0000002A (十六进制大写)
# 包含前缀,使用 f-string 的 # 符号
print(f"{num:#b}") # 输出: 0b101010
print(f"{num:#o}") # 输出: 0o52
print(f"{num:#x}") # 输出: 0x2a
print(f"{num:#X}") # 输出: 0X2A
三、 总结速查表
| 转换方向 | 使用方法 | 结果类型 | 结果值 |
|---|---|---|---|
| 十进制 -> 二进制 | bin(42) | 字符串 | "0b101010" |
| 十进制 -> 八进制 | oct(42) | 字符串 | "0o52" |
| 十进制 -> 十六进制 | hex(42) | 字符串 | "0x2a" |
| 二进制字符串 -> 十进制 | int("101010", 2) | 整数 | 42 |
| 八进制字符串 -> 十进制 | int("52", 8) | 整数 | 42 |
| 十六进制字符串 -> 十进制 | int("2a", 16) | 整数 | 42 |
| 自动识别前缀转十进制 | int("0x2a", 0) | 整数 | 42 |
♥♥♥感谢您的阅读与支持,如果这篇文章对您有帮助,请关注点赞收藏,您的支持是我创作的动力!♥♥♥

8173

被折叠的 条评论
为什么被折叠?



