python 实现进制转化

  • 本篇博客总结了一些python 中进制转换的问题,其中参考了:点击打开链接 这篇博客。
import os ,sys
# global definition
# base = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F]
# base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)]
base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'), ord('A')+6)]
# print(base)   #### ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
# print(ord('A'))  #### 把字符A转为unicode的值  也就是 'A' = 65
# print(chr(65))   #### 把Unicode 值转为 字符   也就是 65 = A
# a, b = divmod(65, 2) ####  Return the tuple (x//y, x%y)
# print(a, b)  ### a = 32, b = 1


### bin to dec 二进制转十进制
def bin2dec(string_num):
    return str(int(string_num, 2))
# print(bin2dec('00000000000000000000000000001011'))

### hex to dec 十六进制转十进制
def hex2dec(string_num):
    return str(int(string_num.upper(), 16))
# print(hex2dec('b'))

### dec to bin  十进制转二进制
def dec2bin(string_num):
    num = int(string_num)
    mid = []
    while True:
        if num == 0: break
        num, mod = divmod(num, 2)  #### 十进制转为二进制
        # num, mod = divmod(num, 16)   #### 十进制转为十六进制
        # num, mod = divmod(num, 8)    #### 十进制转为八进制
        mid.append(base[mod])

    return ''.join(str(x) for x in mid[::-1])
# print(dec2bin(11))

### dec to hex 十进制转为十六进制
def dec2hex(string_num):
    num = int(string_num)
    mid = []
    while True:
        if num == 0: break
        # num, mod = divmod(num, 2)  #### 十进制转为二进制
        num, mod = divmod(num, 16)   #### 十进制转为十六进制
        # num, mod = divmod(num, 8)    #### 十进制转为八进制
        mid.append(base[mod])

    return ''.join(str(x) for x in mid[::-1])
# print(dec2bin(11))

### hex to bin  十六进制转二进制
### 可以等价为,先把十六进制转为十进制, 然后把十进制转为二进制
def hex2bin(string_num):
    return dec2bin(hex2dec(string_num.upper()))
# print(hex2bin("b"))

### bin to hex  二进制转换为十六进制
### 等价为,先把二进制转为十进制,然后把十进制转为十六进制
def bin2hex(string_num):
    return dec2hex(bin2dec(string_num))
print(bin2hex('0100'))
互相学习,互相讨论
<think> 我们正在处理用户关于Python进制转换方法的查询。用户希望了解Python实现进制转换的方法。根据提供的引用,我们可以总结出几种不同的方法: 1. **使用内置函数**:Python提供了内置函数如`bin()`、`oct()`、`hex()`分别用于将整数转换为二进制、八进制和十六进制字符串(引用[1]和引用[2])。其中,`bin(number)`返回一个字符串,前缀为'0b',后面跟着二进制表示。 2. **手动实现转换算法**:通过除2取余法,将十进制数逐次除以2并记录余数,然后反转余数序列得到二进制字符串(引用[4])。这种方法可以让我们理解转换的原理。 3. **使用位移操作**:引用[3]展示了通过位移和按位与操作来实现乘法,但其中也涉及了二进制的思想。虽然不直接用于转换,但说明二进制操作在底层计算中的应用。 4. **其他进制转换**:引用[2]还展示了从十六进制字符串到二进制的转换,方法是先将十六进制字符串转换为整数(使用`int(hex_string, 16)`),然后再用`bin()`转换为二进制字符串。 根据用户需求,我们将重点放在二进制转换上。我们可以提供以下方法: ### 内置函数法(简单直接) 使用`bin()`函数,它是Python内置的,可以直接将整数转换为二进制字符串。注意,结果会有'0b'前缀,如果不需要,可以去掉。 ### 手动实现转换(理解原理) 通过循环除2取余,然后将余数反转。这种方法适合教学,帮助理解转换过程。 此外,用户可能还关心如何将其他进制的字符串(如十六进制)转换为二进制,我们也可以提及。 ### 步骤 1. 介绍内置函数`bin()`。 2. 展示手动实现的代码(除2取余法)。 3. 提及如何从其他进制(比如十六进制)转二进制:先转成整数,再转二进制。 注意:引用中没有直接给出二进制转十进制的方法,但用户的问题集中在二进制转化(其他进制转二进制),所以我们专注于这个方向。 ### 示例代码 我们将展示: - 使用内置函数将十进制转二进制。 - 手动实现进制转二进制。 - 将十六进制字符串转二进制(利用内置函数)。 同时,根据引用[4]的代码,我们还可以展示一个手动实现的例子。 ### 相关问题 最后,生成相关问题。 现在,我们按照要求组织回答。 </think> ### Python实现进制转换的方法总结 根据引用内容,以下是Python实现进制转换的常用方法: #### 1. 使用内置函数 `bin()`(最简单) ```python # 十进制转二进制 def dec_to_bin(num): return bin(num)[2:] # 去掉前缀'0b' print(dec_to_bin(10)) # 输出: 1010 print(dec_to_bin(13)) # 输出: 1101 ``` - 原理:`bin()` 直接返回带 `0b` 前缀的二进制字符串 - 特点:单行代码实现,支持负数转换(如 `bin(-5)` → `-0b101`)[^1] #### 2. 手动实现除2取余法(理解原理) ```python def manual_dec_to_bin(n): b = '' while n: b = str(n % 2) + b # 取余数 n //= 2 # 整除2 return b or '0' # 处理0的情况 print(manual_dec_to_bin(17)) # 输出: 10001 ``` - 步骤: 1. 循环将数字除以2,记录余数(0或1) 2. 将余数从后往前拼接 3. 处理边界情况 `n=0`[^4] #### 3. 十六进制/八进制转二进制 ```python def hex_to_bin(hex_str): # 十六进制→十进制→二进制 return bin(int(hex_str, 16))[2:] print(hex_to_bin("1F")) # 输出: 11111 ``` - 扩展方法: - 八进制转二进制:`bin(int("12", 8))[2:]` → `1010` - 二进制转十进制:`int("1101", 2)` → `13`[^2] #### 4. 位移操作法(高效位运算) ```python def bitwise_dec_to_bin(n): bits = [] while n: bits.append(str(n & 1)) # 取最低位 n >>= 1 # 右移1位 return ''.join(bits[::-1]) or '0' print(bitwise_dec_to_bin(10)) # 输出: 1010 ``` - 原理:通过 `& 1` 获取二进制末位,`>>=` 实现除2效果[^3] ### 方法对比 | **方法** | **优点** | **适用场景** | |------------------------|--------------------------|--------------------------| | `bin()`内置函数 | 代码最简洁,效率高 | 快速转换 | | 除2取余法 | 展示数学原理,易于理解 | 教学/理解转换机制 | | 位移操作法 | 位运算效率高 | 底层开发/性能敏感场景 | | 多进制转换中转十进制 | 支持任意进制互转 | 非十进制之间的转换 | > 示例:`hex_to_bin("A")` → `int("A",16)=10` → `bin(10)[2:]="1010"`[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值