联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话:18888888888 QQ:

Python “魔法”:开启进制转换的奇幻之门

在计算机科学中,进制转换是一个基础而又重要的概念。Python作为一种广泛使用的编程语言,提供了多种方法来进行不同进制之间的转换。本文将深入探讨Python中进制转换的技巧,包括二进制、十进制和十六进制之间的相互转换。

一、十进制与二进制的转换

(一)十进制转二进制

  1. 使用 bin () 函数:Python 内置的bin()函数可以将十进制整数转换为二进制字符串。其语法为bin(x),其中x是要转换的十进制整数。例如:

decimal_num = 10
binary_num = bin(decimal_num)
print(binary_num)  # 输出:0b1010

这里返回的二进制字符串以0b前缀开头,表示这是一个二进制数。若不需要0b前缀,可以使用切片操作去掉,如binary_num[2:] 。

  1. 位运算实现:通过位运算也能实现十进制到二进制的转换。可以利用右移操作和按位与操作,逐位获取二进制位的值。示例代码如下:

    def decimal_to_binary(decimal):
    	binary = ''
    	while decimal > 0:
    		binary = str(decimal & 1) + binary
    		decimal = decimal >> 1
      return binary
      
    decimal_num = 10
    result = decimal_to_binary(decimal_num)
    print(result)  # 输出:1010

(二)二进制转十进制

  1. 使用 int () 函数:int()函数可以将二进制字符串转换为十进制整数。语法为int(x, base),其中x是二进制字符串,base为基数,这里设置为 2。例如:

binary_str = '1010'
decimal_num = int(binary_str, 2)
print(decimal_num)  # 输出:10

手动计算:按照二进制转十进制的计算规则,从右到左用二进制的每个数去乘以 2 的相应位数次方(次方从 0 开始),然后将所有结果相加。
以1010为例:
1 x 23 + 0 x 22 + 1 x 21 + 0x 20 = 8+0+2+0 =10

二、十进制与十六进制的转换

(一)十进制转十六进制

  1. 使用 hex () 函数:hex()函数用于将十进制整数转换为十六进制字符串,语法为hex(x),其中x为十进制整数。例如:

    decimal_num = 255
    hex_num = hex(decimal_num)
    print(hex_num)  # 输出:0xff

    返回的十六进制字符串以0x前缀开头,若要去掉前缀,同样可使用切片操作,如hex_num[2:] 。

  2. 数学计算实现:通过不断对 16 取余和整除的方式,也能实现十进制到十六进制的转换。示例代码如下:

    def decimal_to_hexadecimal(decimal):
    	hex_digits = '0123456789abcdef' 
    	hex_num = ''    
    	while decimal > 0: 
    		remainder = decimal % 16 
    		hex_num = hex_digits[remainder] + hex_num 
    		decimal = decimal // 16
    	return hex_num
    
    decimal_num = 255
    result = decimal_to_hexadecimal(decimal_num)
    print(result)  # 输出:ff

(二)十六进制转十进制

  1. 使用 int () 函数:与二进制转十进制类似,int()函数也可将十六进制字符串转换为十进制整数。语法为int(x, base),这里base设置为 16。例如:

hex_str = 'ff'
decimal_num = int(hex_str, 16)
print(decimal_num)  # 输出:255

按位计算:按照十六进制转十进制的规则,从右到左用十六进制的每个数去乘以 16 的相应位数次方(次方从 0 开始),然后将所有结果相加。
以ff为例:
15 x 161 + 15 x 160 = 240 +15 =255

三、二进制与十六进制的转换

由于 4 位二进制数恰好可以表示 1 位十六进制数,所以二进制与十六进制之间的转换相对简便。

(一)二进制转十六进制

  1. 先转十进制再转十六进制:可以先将二进制数转换为十进制数,再利用hex()函数将十进制数转换为十六进制数。例如:

binary_str = '11111111'
decimal_num = int(binary_str, 2)
hex_num = hex(decimal_num)
print(hex_num)  # 输出:0xff
  1. 直接转换:利用 Python 的字符串操作和字典映射实现直接转换。将二进制字符串按 4 位一组进行分割,然后将每组二进制转换为对应的十六进制字符。示例代码如下:

binary_to_hex_dict = {   
	'0000': '0', '0001': '1', '0010': '2', '0011': '3',   
	'0100': '4', '0101': '5', '0110': '6', '0111': '7',    
	'1000': '8', '1001': '9', '1010': 'a', '1011': 'b',  
	'1100': 'c', '1101': 'd', '1110': 'e', '1111': 'f'
}

def binary_to_hexadecimal(binary):
	binary = '0' * (4 - len(binary) % 4) + binary 
	hex_num = '' 
	for i in range(0, len(binary), 4): 
		hex_num += binary_to_hex_dict[binary[i:i + 4]]   
	return hex_num

binary_str = '11111111'
result = binary_to_hexadecimal(binary_str)
print(result)  # 输出:ff

(二)十六进制转二进制

  1. 先转十进制再转二进制:先将十六进制数通过int()函数转换为十进制数,再利用bin()函数将十进制数转换为二进制数。例如:

hex_str = 'ff'
decimal_num = int(hex_str, 16)
binary_num = bin(decimal_num)
print(binary_num)  # 输出:0b11111111
  1. 直接转换:通过字典映射,将十六进制的每一位转换为对应的 4 位二进制字符串,然后拼接起来。示例代码如下:

hex_to_binary_dict = {   
	'0': '0000', '1': '0001', '2': '0010', '3': '0011',   
	'4': '0100', '5': '0101', '6': '0110', '7': '0111',   
	'8': '1000', '9': '1001', 'a': '1010', 'b': '1011',   
	'c': '1100', 'd': '1101', 'e': '1110', 'f': '1111'
}

def hexadecimal_to_binary(hexadecimal):   
	binary = ''    
	for digit in hexadecimal:        
		binary += hex_to_binary_dict[digit]    
	return binary

hex_str = 'ff'
result = hexadecimal_to_binary(hex_str)
print(result)  # 输出:11111111

总结

通过以上多种方法,开发者可以在 Python 中灵活实现二进制、十进制和十六进制之间的相互转换,满足不同场景下的数据处理需求。在实际应用中,应根据具体情况选择最合适的方法,以提高代码的效率和可读性。

相关文章

neo4j部署手册
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
DataX和DataX-WEB 安装步骤
DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、 MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。
K8S集群搭建手册(集群版)
kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Apollo部署手册
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册