二进制、八进制、十进制、十六进制之间进行相互转换

#coding = utf-8
'''
Created on 2015年5月28日 
二进制、八进制、十进制、十六进制之间进行相互转换
'''
class nsc():
    
    hex_num={0:'0',1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7',8:'8',9:'9',10:'a',11:'b',12:'c',13:'d',14:'e',15:'f'}
    num_hex={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'a':10,'b':11,'c':12,'d':13,'e':14,'f':15}
    
    '''二进制转十进制'''
    def bin2dec(self,num):
        #根据二进制的位数来计算
        result=0
        for i in str(num):
            result=result*2+int(i) 
        return result
    
    '''二进制转八进制'''
    def bin2oct(self,num):
        
        result = ''
        temp=list(str(num))
        insert=3-len(temp)%3
        
        while insert and insert !=3:
            temp.insert(0, 0)
            insert-=1
        
        while temp:
            result=str(int(temp.pop())*1+int(temp.pop())*2+int(temp.pop())*4)+result
        return int(result)
   
    '''二进制转十六进制'''
    def bin2hex(self,num):
        result = ''
        temp=list(str(num))
        insert=4-len(temp)%4
        
        while insert and insert!=4:
            insert-=1
            temp.insert(0, 0)
                   
        while temp:
            #TODO 格式化输出
            x=int(temp.pop())*1+int(temp.pop())*2+int(temp.pop())*4+int(temp.pop())*8
            result=self.hex_num[x]+result
        return result
    
    '''十进制转二进制'''
    def dec2bin(self,num):
        #除2取余,逆序排列
        result=''
        temp=[]
        while num:
            temp.append(num%2)
            num=num//2
        while temp:
            result+=str(temp.pop())
        return int(result)
    
    '''十进制转八进制'''
    def dec2oct(self,num):
        return self.bin2oct(self.dec2bin(num))
    
    '''十进制转十六进制'''
    def dec2hex(self,num):
        return self.bin2hex(self.dec2bin(num))
    
    '''十六进制转二进制'''
    def hex2bin(self,num):
        hex_n=list(str(num))
        result=''
        for i in hex_n:
            result+=str(self.dec2bin(self.num_hex[i]))
        return result
         
    '''十六进制转八进制'''
    def hex2oct(self,num):
        return self.bin2oct(self.hex2bin(num))
    
    '''十六进制转十进制'''
    def hex2dec(self,num):
        return self.bin2dec(self.hex2bin(num))
        
if __name__=='__main__':
    nc=nsc()
    print(nc.hex2dec('fffee'))

 

 

posted @ 2017-01-19 18:29  ,,,沙子,,,  阅读(207)  评论(0编辑  收藏  举报