Python “魔法”:开启进制转换的奇幻之门
一、十进制与二进制的转换
(一)十进制转二进制
使用 bin () 函数:Python 内置的bin()函数可以将十进制整数转换为二进制字符串。其语法为bin(x),其中x是要转换的十进制整数。例如:
这里返回的二进制字符串以0b前缀开头,表示这是一个二进制数。若不需要0b前缀,可以使用切片操作去掉,如binary_num[2:] 。
位运算实现:通过位运算也能实现十进制到二进制的转换。可以利用右移操作和按位与操作,逐位获取二进制位的值。示例代码如下:
(二)二进制转十进制
使用 int () 函数:int()函数可以将二进制字符串转换为十进制整数。语法为int(x, base),其中x是二进制字符串,base为基数,这里设置为 2。例如:
手动计算:按照二进制转十进制的计算规则,从右到左用二进制的每个数去乘以 2 的相应位数次方(次方从 0 开始),然后将所有结果相加。
以1010为例:
1 x 23 + 0 x 22 + 1 x 21 + 0x 20 = 8+0+2+0 =10
二、十进制与十六进制的转换
(一)十进制转十六进制
使用 hex () 函数:hex()函数用于将十进制整数转换为十六进制字符串,语法为hex(x),其中x为十进制整数。例如:
返回的十六进制字符串以0x前缀开头,若要去掉前缀,同样可使用切片操作,如hex_num[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
(二)十六进制转十进制
使用 int () 函数:与二进制转十进制类似,int()函数也可将十六进制字符串转换为十进制整数。语法为int(x, base),这里base设置为 16。例如:
按位计算:按照十六进制转十进制的规则,从右到左用十六进制的每个数去乘以 16 的相应位数次方(次方从 0 开始),然后将所有结果相加。
以ff为例:
15 x 161 + 15 x 160 = 240 +15 =255
三、二进制与十六进制的转换
由于 4 位二进制数恰好可以表示 1 位十六进制数,所以二进制与十六进制之间的转换相对简便。
(一)二进制转十六进制
先转十进制再转十六进制:可以先将二进制数转换为十进制数,再利用hex()函数将十进制数转换为十六进制数。例如:
直接转换:利用 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
(二)十六进制转二进制
先转十进制再转二进制:先将十六进制数通过int()函数转换为十进制数,再利用bin()函数将十进制数转换为二进制数。例如:
直接转换:通过字典映射,将十六进制的每一位转换为对应的 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 中灵活实现二进制、十进制和十六进制之间的相互转换,满足不同场景下的数据处理需求。在实际应用中,应根据具体情况选择最合适的方法,以提高代码的效率和可读性。
评论