进制转换

十进制转二进制(1)

#十进制转二进制
#十进制转二进制
def decimal_to_hinary(decimal_number):
    s=''                                    #转换结果
    while decimal_number>0:                 #在商比0大的时候
        r=decimal_number%2                  #余数
        s=str(r)+s                          #倒取余数
        decimal_number=decimal_number//2    #短除法除2
    return s

#十进制转二进制(1)测试函数
print('十进制转二进制测试函数')
print('十进制:',13)
print('二进制:',decimal_to_hinary(13))

十进制转二进制(2)

#将十进制数decimal_number不大于255转成8位二进制
#不补8位前面补0,自定义函数返回列表
def decimal_to_binary_8(dec):
    a=[0]*8                     #创建要输出的列表
    for i in range(len(a)):
        a[7-i]=dec % 2          #将十进制对2取余数,倒序放入列表
        dec=dec//2              #整除2
    return a

#十进制转二进制(2)测试函数
print('十进制转二进制测试函数')
decimal_number = 13 
binary_number = decimal_to_binary_8(decimal_number)
print("十进制数:"+str(decimal_number))
print(" 转换为结果为:",binary_number)

十进制转十六进制

#将十进制数n转成十六进制,列如:十进制数26,返回结果为1A
def decimal_to_hex(n):
    s=""                    #输出结果
    k="0123456789ABCDEF"    #方便进行数字与十六进制字母转换
    while n!=0:
        r=n % 16            #计算余数
        s=k[r]+s            #短除法倒取余数
        n=n//16             #短除法下一位
    return s

# 十进制转十六进制测试函数
print('\n十进制转十六进制测试函数')
dec_num=46
hex_num=decimal_to_hex(dec_num)
print("十进制数:",dec_num)
print("十六进制数:",hex_num)

二进制转十进制

#将二进制数s转成十进制,
def binary_to_decimal(s):
    n=len(s)
    ans=0                   #要返回得值
    for i in range(n):
        x=int(s[i])         #数值转为整型
        ans+=2**(n-1-i)*x   #公式:位权*数值
    return ans

# 二进制转十进制测试函数
print('\n二进制转十进制测试函数')
bin_num='1101'
dec_num=binary_to_decimal(bin_num)
print("二进制数:",bin_num)
print("十进制数:",dec_num)

十六进制转十进制

#将十六进制数s转成十进制,列如:十六进制数2A,返回结果为42
def hex_to_decimal(s):
    n=len(s)
    ans=0
    for i in range(n):
        if "A"<=s[i]<="Z":  #如果是十六进制中的字母
            x=ord(s[i])-55  #将字母转换为数字
        else:
            x=int(s[i])
        ans+=16**(n-1-i)*x  #数值*位权相加
    return ans

#将十六进制数s转成十进制测试函数
print('\n将十六进制数s转成十进制测试函数')
hex_num='2A'
dec_num=hex_to_decimal(hex_num)
print("十六进制数:",hex_num)
print("十进制数:",dec_num)

二进制转十六进制(直接)

#二进制字符串分割成4位一组,每4位二进制转成对应一位十六进制,然后拼接结果
def binary_to_hex(s):
    while len(s) % 4 != 0:      
    # 补充二进制字符串长度至4的倍数,以便后面的处理
        s = '0' + s
    hex_string = ""
    for i in range(0, len(s), 4):   
    # 将二进制字符串分割成4位一组,并将每组转换为对应的十六进制数
        ans = 0                     # 计算每组四位二进制数的十进制值
        for j in range(4):
            ans += 2**(4-1-j)*int(s[i+j])
        if ans < 10:                # 将十进制值转换为十六进制字符
            hex_digit = str(ans)
        else:
            hex_digit = chr(55+ans)
        hex_string += hex_digit
    return hex_string

# 二进制直接转十六进制测试代码
print('\n二进制直接转十六进制测试代码')
s = "101010"
hex_value = binary_to_hex(s)
print("二进制:", s)
print("十六进制:", hex_value)

十六进制转二进制(直接)

#将每位十六进制转成4位二进制字符串,不足4位,前面补0,然后拼接结果
def hex_to_binary(s):
    n=len(s)
    ans=''
    for i in range(n):
        if 'A'<=s[i]<='Z':  #十六进制字母转换为十进制数字
            x=ord(s[i])-55
        else:
            x=int(s[i])
        ans_4=''            #对应每一位十六进制转换为二进制的结果
        while x>0:          #将一位十六进制转换为四位二进制
            r=x%2
            ans_4=str(r)+ans_4
            x=x//2
        while len(ans_4)<4: #不足四位补足四位
            ans_4='0'+ans_4
        ans+=ans_4          #加入字符串中
    return ans

# 将每位十六进制转成4位二进制字符串测试代码
print('\n将每位十六进制转成4位二进制字符串测试代码')
s = "3B"
hex_value = hex_to_binary(s)
print("十六进制:", s)
print("二进制:", hex_value)