• 【python】用python进行进制转换(10进制、2进制、16进制)


    博客由来写在前面:由于计组老师要求我们课后查一下进制转换,因为底层的都是01二进制进行编码的,故而想到用python进行传统的进制转换手推理解,配上python本身的函数进行答案对比,故有此篇博客。

    每一个进制之间转换包含俩种算法,一种是直接调用python的进制转换包,一种是用人工计算进制转换的思路写的(其中2进制转为16进制,是采用2进制局部转为10进制再转为16进制的方法)

    16进制转10进制

    b_16 = '1111'
    
    # 方法1 - 调用函数法
    b_2 = int(b_16, 16)
    print(b_2)
    
    # 方法2 - 按照计算原则
    b_16_len = len(b_16)
    count = 0
    for i in b_16:
        temp = int(i)
        count = count + temp*16**(b_16_len-1)
        b_16_len = b_16_len - 1
    print(count)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    结果:

    4369
    4369
    
    • 1
    • 2

    ② 16进制转2进制

    a_16 = '7A9B'
    
    # 方法1 - 调用函数法
    a_2 = bin(int(a_16,16))[2:]
    print(a_2)
    
    # 方法2 - 按照计算原则
    for i in a_16:
        if i == '1':
            print('0001',end='')
        if i == '2':
            print('0010',end='')
        if i == '3':
            print('0011',end='')
        if i == '4':
            print('0100',end='')
        if i == '5':
            print('0101',end='')
        if i == '6':
            print('0110',end='')
        if i == '7':
            print('0111',end='')
        if i == '8':
            print('1000',end='')
        if i == '9':
            print('1001',end='')
        if i == 'A':
            print('1010',end='')
        if i == 'B':
            print('1011',end='')
        if i == 'C':
            print('1100',end='')
        if i == 'D':
            print('1101',end='')
        if i == 'E':
            print('1110',end='')
        if i == 'F':
            print('1111',end='')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    结果:

    111101010011011
    0111101010011011
    
    • 1
    • 2

    10进制转16进制

    c_10 = 1273
    
    # 方法1 - 调用函数法
    c_16 = hex(c_10)
    print(c_16)
    
    # 方法2 - 按照计算原则
    list = []
    while c_10//16 != 0:
        temp = c_10%16
        if temp <= 9:
            list.append(temp)
        if temp == 10:
            temp = 'a'
            list.append(temp)
        if temp == 11:
            temp = 'b'
            list.append(temp)
        if temp == 12:
            temp = 'c'
            list.append(temp)
        if temp == 13:
            temp = 'd'
            list.append(temp)
        if temp == 14:
            temp = 'e'
            list.append(temp)
        if temp == 15:
            temp = 'f'
            list.append(temp)
        c_10 = c_10//16
    
    list.append(c_10%16)
    
    for i in list[::-1]:
        print(i,end='')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    结果:

    0x4f9
    4f9
    
    • 1
    • 2

    ④ 10进制转2进制

    d_10 = 17
    
    # 方法1 - 调用函数法
    d_2 = bin(d_10)
    print(d_2)
    
    # 方法2 - 按照计算原则
    list = []
    while d_10//2 != 0:
        temp = d_10%2
        list.append(temp)
        d_10 = d_10//2
    
    list.append(d_10%2)
    
    for i in list[::-1]:
        print(i,end='')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    结果:

    0b10001
    10001
    
    • 1
    • 2

    ⑤ 2进制转16进制

    e_2 = '1011011101'
    
    # 方法1 - 调用函数法
    e_16 = hex(int(e_2, 2))
    print(e_16)
    
    # 方法2 - 按照计算原则
    ## 1、确定有几个,最前面的1-4单独计算,后面的按照4的倍数进行计算
    e_2_len = len(e_2) # 总长
    e_2_first =  e_2_len % 4 # 首位1-4
    e_2_count = e_2_len // 4
    list = [] # 保存
    
    # 2->10->16 就不用传统方法了,上面都写过如何分步转换
    if e_2_first!=0:
        head = hex(int(e_2[0:e_2_first], 2))
        list.append(head)
    
    for i in range(e_2_count):
        temp = e_2[e_2_first+4*i:e_2_first+4*(i+1)] # 4个为一个局部
        list.append(hex(int(temp, 2)))
    
    for i in list:
        print(i[2],end='')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    结果:

    0x2dd
    2dd
    
    • 1
    • 2

    ⑥ 2进制转10进制

    f_2 = '1111'
    
    # 方法1 - 调用函数法
    f_10 = int(f_2, 2)
    print(f_10)
    
    # 方法2 - 按照计算原则
    f_2_len = len(f_2)
    count = 0
    for i in f_2:
        temp = int(i)
        count = count + temp*2**(f_2_len-1)
        f_2_len = f_2_len - 1
    print(count)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    结果:

    15
    15
    
    • 1
    • 2
  • 相关阅读:
    【C++入门】C语言的不足之处
    JVM优化(OOM,内存溢出),查看线程快照,堆内存情况等问题
    电子邮件发送接收原理(附 go 语言实现发送邮件)
    2022年0702 第八课 JAVA中的数据结构重中的集合
    ③ 软件工程CMM、CMMI模型【软考中级-软件设计师 考点】
    精通git,没用过git cherry-pick?
    Vue页面内容未保存时离开页面做弹框提示
    第一章 教育基础(03 教育目的与教育制度)
    Linux的redis启动过程详解
    2023 山东省赛 【9.28训练补题】
  • 原文地址:https://blog.csdn.net/weixin_42198265/article/details/126678567