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))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM