2015-09-03 56 views
0

我經常需要將狀態代碼轉換爲位表示形式,以便確定使用純文本或二進制通信協議的分析儀上哪些錯誤/狀態是活動的。python中二進制轉換的替代方法

我使用python來輪詢數據並解析它。有時候我真的很困惑,因爲我發現有很多方法可以解決問題。今天,我不得不將每個字符都是十六進制數字的字符串轉換爲二進制表示形式。也就是說,每個十六進制字符必須轉換爲4位,MSB從左邊開始。注意:我需要一個char轉換字符,並且前導零。

我設法建立了這些以準線單線方式完成技巧的函數。 。

def convertStatus(s, base=16): 
    n = int(math.log2(base)) 
    b = "".join(["{{:0>{}b}}".format(n).format(int(x, base)) for x in s]) 
    return b 

例如,這種轉換下面輸入:

abcdef 

到:

0000000100100011010001010110011110001001101010111100110111101111 

這是我的目標。

現在,我想知道我可以用什麼優雅的解決方案來實現我的目標?我也想更好地理解解決方案中的優點和缺點。函數簽名可以更改,但通常它是輸入和輸出的字符串。讓我們變得富有想象力......

+0

可能的[將十六進制轉換爲二進制]的副本(http://stackoverflow.com/questions/1425493/convert-hex-to-binary) –

+2

'斌(INT(S,16))'? –

+0

@Padraic,它是否通過字符轉換產生字符? – jlandercy

回答

0

這是簡單的兩個步驟

  1. 將字符串轉換成int幾乎是微不足道的:使用int(aString, base=...)
    • 第一個參數是可以是一個字符串!
    • ,並與基地,幾乎每一個選項是可能的
  2. 轉換一個數字,一個字符串很容易與format()mini print language

所以轉換十六進制字符串二進制可以做到

def h2b(x): 
    val = int(x, base=16) 
    return format(val, 'b') 

這裏的兩個步驟是明確的。可能最好是在一行中執行,或者甚至可以在線執行

+0

好的答案。這是做它的pythonic方式,因爲它簡單直接。如果需要,可以返回格式(val,'b').zfill(len(x)* 4)。 –

+0

您可以嵌套格式說明符。因此,格式化可以在一個方法調用中完成。 '「{:0 {} b}」.format(val,num_chars)'。這可以使基本變量。 – Dunes

相關問題