2017-02-24 36 views
3

我試圖創建一個函數,它接受一個二進制字符串並將其轉換爲十六進制。到目前爲止,我只能創建一個可以將int轉換爲十六進制的函數。將二進制轉換爲十六進制

以下是我有:

def intToHex(num): 
    num = abs(num) 
    symdict={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"} 
    rlist=[] 
    while(num!=0): 
     rlist.append(num%16) 
     num//=16 
    rlist=rlist[::-1] 
    for idx, val in enumerate(rlist): 
     rlist[idx] = symdict.get(val, str(val)) 

    print(''.join(rlist)) 

intToHex(4512) 

輸出樣本:11A0

你怎麼能做出一個功能,無需使用二進制轉換爲十六進制建宏。有沒有可能爲此目的修改我的功能?

+2

基本上你在問什麼是你如何將一個基數爲n的數字轉換爲數字基數m。在你的回答中,你從基數10變爲基數16.你需要將基數2改爲基數16.基本上,你已經完成了一半邏輯:) – aydow

回答

2

既然你已經有一個整型爲十六進制,這裏有一些二進制字符串函數:

代碼:

def bin_to_int(bin): 
    return sum([(1 << i) for i, c in enumerate(reversed(bin)) if c == '1']) 

def int_to_bin(num): 
    bin = '' 
    while num: 
     bin = '01'[num & 1] + bin 
     num = num >> 1 
    return bin 

測試代碼:

print(bin_to_int('1001')) 
print(int_to_bin(bin_to_int('1001'))) 

產地:

9 
1001 
2

您可以添加一些代碼到您現有的功能首先將二進制到INT,然後詮釋爲十六進制(代碼)或開發一些邏輯來二進制直接轉換爲十六進制。

2

我寫的這個函數來自我的庫。這個庫被稱爲libZ庫。這個函數可以將十萬個數字的十六進制數字轉換成二進制數字,並且只限於Python讓字符串變成多長時間。

如果您想了解該函數是如何工作的,我寫了一篇關於將十六進制轉換爲二進制文件的非常詳細的文章。你可以在http://kevinhng86.iblog.website/2017/01/27/working-with-number-converting-binary-and-hexadecimal-python/找到這篇文章。

def binhexZ(invalue): 
    wmap = {"0000": "0", 
      "0001": "1", 
      "0010": "2", 
      "0011": "3", 
      "0100": "4", 
      "0101": "5", 
      "0110": "6", 
      "0111": "7", 
      "1000": "8", 
      "1001": "9", 
      "1010": "A", 
      "1011": "B", 
      "1100": "C", 
      "1101": "D", 
      "1110": "E", 
      "1111": "F" 
      } 
    i = 0 
    output = "" 

    while (len(invalue) % 4 != 0): 
     invalue = "0" + invalue 

    while (i < len(invalue)): 
     output = output + wmap[invalue[i:i + 4]] 
     i = i + 4 

    output = output.lstrip("0") 
    output = "0" if len(output) == 0 else output 

    return output 
相關問題