zoukankan      html  css  js  c++  java
  • Python 各种进制的转换

    进制介绍

    转换二进制: bin()函数
    
    转换十进制:int()函数
    
    转换十六进制:hex()函数
    
    转换8进制:oct()函数
    
    

    1. 十进制转为其它进制

    1. 十进制转为二进制

    print(bin(4)) # 输出0b100
    print('{0:b}'.format(4)) # 输出100 
    

    2. 十进制转为八进制

    print(oct(8)) #输出0o10
    print('{0:o}'.format(8)) # 输出10
    

    3. 十进制转十六进制

    print(hex(15)) # 输出0xf
    print('{0:x}'.format(15)) # 输出f
    

    2. 其它进制转十进制

    1. 二进制转为十进制

    # int('要转换的字符串',制定进制)
    print(int('1010', 2)) # 输出10
    print(eval('0b1010')) # 输出10
    print('{0:d}'.format(0b1010)) # 输出10
    

    2. 八进制转为十进制

    print(int('14', 8)) # 输出12
    print(eval('0o14')) # 输出12
    print('{0:d}'.format(0o14)) # 输出12
    

    3. 十六进制转为十进制

    print(int('10', 16)) # 输出16
    print(eval('0x10')) # 输出16
    print('{0:d}'.format(0x10)) # 输出16
    

    注意

    hex()函数格式化字符串比format()慢,不推荐使用。

    eval()函数比hex慢,不推荐使用。

    3. 二进制、八进制以及十六进制之间的转换

    • 借助十进制
    print(bin(int('0xf', 16))) # 输出0b1111
    
    • 函数直接转换
    print(bin(0xa)) # 输出0b1010
    print(oct(0xa)) # 输出0o12
    print(hex(0b1010)) #输出0xa
    

    代码逻辑进制转换

    class Jinzhi(object):
        '''
        # 输入特定进制的数实现进制转换
        # 输入/输出:仅二进制,八进制,十进制,十六进制相互转换
        # 要求
        # 十进制直接输入数字即可
        # 二进制0b
        # 八进制0o
        # 十六进制0x
        # 仅支持整数数字输入
        '''''
        # 进制对应的字典
        jinzhi = {'0b':'二进制','0o':'八进制','default':'十进制','0':'十六进制'}
    
        '''构造函数:用户输入:user_input_num,输出进制类型out(默认输出十进制)'''
        def __init__(self,user_input_num,out='10'):
            if user_input_num == '0':
                return 0
            else:
                # 用户输入为字符串变量
                self.user_input_num = user_input_num
                self.out = out
                # 将数据统一转换为10进制
                self.user_format_data = eval(self.user_input_num)
                # 判断用户输入进制类型
                self.get_type()
                # 根据out进行进制输出
                jieguo = self.output_data(out)
                self.get_info(jieguo)
    
        # 根据前缀判断数字是哪种进制
        def get_type(self):
            # 看用户输入的字符串长度是否符合前缀要求
            if len(self.user_input_num)>2:
                #取用户输入字符串前缀
                head = self.user_input_num[0:2]
                if head == '0b' or head =='0B':
                    # 二进制前缀
                    self.type = '0b'
                elif head == '0o' or head == '0O':
                    # 八进制前缀
                    self.type = '0o'
                elif head == '0x' or head == '0X':
                    # 十六进制前缀
                    self.type = '0x'
                else:
                    self.type = 'default'
            else:
                self.type = 'default'
    
        # 根据out参数输出目标进制
        def output_data(self,out):
            if out == '2':
                self.out_jinzhi = '二进制'
                return '{0:b}'.format(self.user_format_data)
            elif out == '8':
                self.out_jinzhi = '八进制'
                return '{0:o}'.format(self.user_format_data)
            elif out == '16':
                self.out_jinzhi = '十六进制'
                return '{0:x}'.format(self.user_format_data)
            else:
                self.out_jinzhi = '十进制'
                return self.user_format_data
    
        # 信息打印
        def get_info(self,jieguo):
            print('-'*50)
            print('您输入的数据:'+self.user_input_num)
            print('它是:'+ self.jinzhi[self.type]+'数')
            print('您希望输出的结果:'+self.out_jinzhi+'数')
            print('输出结果是:'+str(jieguo))
            print('-'*50)
    
    if __name__ == '__main__':
        jinzhi_obj = Jinzhi(user_input_num='7',out='2')
        jinzhi_obj = Jinzhi(user_input_num='1000',out='8')
        jinzhi_obj = Jinzhi(user_input_num='1000',out='16')
    
    

    简易进制转换

    # 获取用户输入十进制数
    dec = int(input("输入数字:"))
    
    print("十进制数为:", dec)
    print("转换为二进制为:", bin(dec))
    print("转换为八进制为:", oct(dec))
    print("转换为十六进制为:", hex(dec))
    
  • 相关阅读:
    有关远程设置的问题
    QT使用tableWidget显示双排列表 而且选中用红框圈出来
    一个程序猿的跨洋找工作分享
    linux块设备的IO调度算法和回写机制
    基于servlet实现一个web框架
    Java中的条件编译(转)
    Android NDK 使用第三方静态库(转)
    Android 使用动态库或静态库来编译生成动态库(转)
    Android应用运行过程(转)
    android NDK编译(导入).a文件和编译多个so文件(转)
  • 原文地址:https://www.cnblogs.com/xinzaiyuan/p/12437114.html
Copyright © 2011-2022 走看看