2016-02-23 31 views
1

是從十六進制轉換值至二值value.I使用蟒的二進制位()是這樣的:從十六進制轉換爲二進制值

value = 05808080 
print bin(int(value, 16)) 

output i got is 0b101100000001000000010000000(output should be 32 bit) 
output should be 0000 0101 1000 0000 1000 0000 1000 0000(correct output) 

這是什麼「B」在輸出和如何更換它具有正確的二進制值。我認爲這裏的兩個值幾乎相同,除了輸出中的「b」問題。我將如何解決這個問題?

+1

值是一個字符串?如果我把它作爲一個int輸入,沒有''',我得到SyntaxError,因爲一個八進制數(以'0開始'不能包含一個8. –

回答

1

你得到的輸出是正確的,只需要格式化一下。前導0b表示它是二進制數,與0x代表十六進制數的方式類似,0代表八進制數。

首先,切走0b[2:]和使用zfill添加前導零:

>>> value = '05808080' 
>>> b = bin(int(value, 16)) 
>>> b[2:] 
'101100000001000000010000000' 
>>> b[2:].zfill(32) 
'00000101100000001000000010000000' 

最後分裂成四個字符間隔串並加入那些有空格:

>>> s = b[2:].zfill(32) 
>>> ' '.join(s[i:i+4] for i in range(0, 32, 4)) 
'0000 0101 1000 0000 1000 0000 1000 0000' 

如果你可以沒有這些分隔空間,你也可以使用format string

>>> '{:032b}'.format(int(value, 16)) 
'00000101100000001000000010000000' 
+0

thankz it works – Vishnu