站点图标 AI技术聚合

Python 进制转换,一步到位

文章目录

  • 参考
  • 描述
  • 进制
      • 计算机与二进制
      • 进制转换
      • 数值在 Python 中的表示
  • 基础进制 ⚜十进制⚜
      • 十进制数值转二进制
          • bin()
          • format()
      • 目标进制 ⚜八进制或十六进制⚜
  • 目标进制 ⚜十进制⚜
      • 二进制转十进制
          • int()
          • format()
      • 基础进制 ⚜八进制或十六进制⚜
  • 其他进制之间的相互转换

参考

项目描述
Python 官方文档string – 常见的字符串操作
Python 官方文档内置函数
搜索引擎Google 、Bing

描述

项目描述
Python 解释器3.10.6

进制

计算机与二进制

计算机是一种数字电子设备,它使用二进制数值 01 来表示和处理信息。计算机可以通过一系列的操作(如逻辑运算、算术运算等)来处理二进制数据,并将结果以相应的方式输出。

在计算机中,二进制数是以 位(bit) 为单位来表示的,每个位只能是 018 个二进制位(即 8bits)可以组合为一个 字节(byte)

进制转换

进制转换是指将一个数值从一种进制表示转换为另一种进制表示的过程。 在计算机科学中,进制转换是一个非常常见的操作,因为 不同的进制数在不同的应用场景中都有其独特的优势。

Python 中提供了实现进制转换的多种方式,大致有:

  1. 专门用于实现进制转换的内置函数

  2. format() 函数

  3. 自定义函数
    除了使用 Python 提供的各种内置函数外,你还可以基于进制转换间的原理实现自己的进制转换函数。

数值在 Python 中的表示

数值在 Python 常以十进制的格式进行表示。如果你希望在 Python 中表示非十进制数值,则需要添加特定的前缀。

前缀意义
0b0B该前缀后的数值为 二进制数值,二进制数值中仅能出现 01。否则,Python 将为此抛出异常信息。
0o0O该前缀后的数值为 八进制数值,八进制数值中仅能出现 0~7 范围内的数值。 否则,Python 将为此抛出异常信息。
0x0X该前缀后的数值为 十六进制数值,十六进制数值中仅能出现 0~9a-fA-F 范围内的数值。 否则,Python 将为此抛出异常信息。

举个栗子

print(0o23)
print(0b101)
print(0XFF)

执行效果

在 Python中,整数默认是以十进制的形式进行 表示 的。虽然在书写整数时可以使用不同进制的表示方式,但是这些表示方式只是为了方便程序员书写和阅读代码,实际上在计算机内部,所有的整数都是以二进制的形式 存储 的。 因此,当我们使用 print() 函数输出整数时,无论这个整数是以哪种进制表示的,Python 都会将其转换为十进制形式(人类最常使用到的进制类型)并输出到控制台上。 因此,上述代码的输出结果为:

19
5
255

基础进制 ⚜十进制⚜

Python 提供了许多内置函数可以实现十进制数值到其他进制的转换。

十进制数值转二进制

bin()

在 Python 中,bin() 函数 用于将整数转换为二进制形式的字符串。bin() 函数接收一个整数类型的参数,将其转换为对应的 二进制字符串表示,并返回该字符串
返回的二进制字符串的前缀为 0b-0b,表示该字符串是一个二进制数的字符串表示。

举个栗子

target = -97

# 将十进制数值转换为二进制数值的结果保存至变量 result 中
result = bin(target)
# 输出转换结果至控制台中
print(result)
# 输出转换结果的数据类型
print(type(result))

执行效果

-0b1100001
<class 'str'>

注:

  1. bin() 函数的参数必须为一个整数。否则,Python 将抛出异常错误信息。
TypeError: 'str' object cannot be interpreted as an integer

或:

TypeError: 'float' object cannot be interpreted as an integer
  1. 在某些情况下你可能并不需要二进制数值的前缀中的 0b ,你可以使用 replace() 函数将其去除。对此,请参考如下示例:
target = -97

result = bin(target).replace('0b', '', 1)
print(result)

执行效果

-1100001
format()

使用 format() 函数 可以将十进制数值转换为二进制数值。其中,format() 函数的 第一个参数是需要格式化的数值第二个参数是格式化字符串,用来指定数值的格式。在格式化字符串中,使用 b 可以将数值转换为二进制数值的字符串。

举个栗子

target = -97

result = format(target, 'b')
print(result)
print(type(result))

执行效果

-1100001
<class 'str'>

注:

在使用格式字符串将一种进制的数值转换为另一种进制的数值时,第一个参数需要为数值。否则,Python 将与如下内容类似的抛出异常错误信息。

ValueError: Unknown format code 'b' for object of type 'str'

目标进制 ⚜八进制或十六进制⚜

将十进制数转换为八进制与十六进制所使用的方法以及转换过程中所遇到的限制是类似的。在进制转换过程中,所需使用到的函数及提供给 format() 的格式字符串是不同的,具体如下。

在函数方面

进制函数
八进制oct()
十六进制hex()

在格式字符串方面

进制格式字符串
八进制o
十六进制x

目标进制 ⚜十进制⚜

二进制转十进制

int()

在将其他进制转换为十进制时,通常会使用到 Python 提供的内置函数 int()

int(x, base=10)

其中:

参数含义
x待转换的数值、字符串或字节串(形如 b’Hello World’ 的数据)。
base待转换数据的进制类型。使用 int() 函数能够将待转换数值由 base 进制转换为 进制。当 base 参数的值不为 10 时,x 参数的值只能为字节串或字符串。否则,Python 将抛出异常信息。

举个栗子

target = '0b11010'

result = int(target, 2)
print(result)

执行效果

26

注:

使用 int() 函数将其他进制转换为十进制时,其他进制的数并不一定需要带有该进制所特有的前缀。在没有前缀的情况下,int() 函数也能够正确的将其他进制的数转换为十进制数。

format()

可以使用 format() 函数将其他进制的数值转换为十进制数值,具体实现可以通过在格式字符串中使用 d 格式化字符串,表示将数值转换为十进制数值。对此请参考如下示例:

# 将二进制数值转换为十进制数值
print(format(0b10101, 'd'))
# 将八进制数值转换为十进制数值
print(format(0o73, 'd'))
# 将十六进制数值转换为十进制数值
print(format(0xf7, 'd'))

执行效果

21
59
247

注:

在使用格式字符串将一种进制的数值转换为另一种进制的数值时,第一个参数需要为数值。否则,Python 将与如下内容类似的抛出异常错误信息。

ValueError: Unknown format code 'b' for object of type 'str'

基础进制 ⚜八进制或十六进制⚜

将八进制或十六进制转换为十进制的方式与遇到的限制是类似的。

  1. 在使用 int() 函数进行转换的过程中,仅需要适当修改该函数的 base 参数的值即可。

  2. 使用 format() 进行八进制或十六进制到十进制的转换时,使用的格式字符串是相同的,均为 b

其他进制之间的相互转换

Python 内置了将其他进制 (二进制、八进制及十六进制) 转换为十进制的函数和将十进制转换为其他进制的函数。在需要进行其他进制之间的进制转换操作时,往往需要 将原数值转换为十进制数值后再将其转换为目标进制的数值

举个栗子

将二进制数值转换为十六进制数值,需要先将二进制数值转换为十进制数值,再将十进制数值转换为十六进制数值。

target = '0b11010'

# 首先将二进制数值转换为十进制数值
decimal = int(target, 2)
# 将转换得到的十进制数值再转换为目标进制(十六进制)的数值
result = hex(decimal)
# 将转换结果输出至控制台中
print(result)

执行效果

0x1a

文章出处登录后可见!

已经登录?立即刷新
退出移动版