2011-08-18 15 views
0

我有這樣的代碼轉換二進制到十六進制十六進制轉換器的幫助 - Python的

## The Input part 

l = raw_input('Input 8-bit number: ') 
j = list(l) 

## Value Error part 

t = [int(x) for x in j] 
if len(t) != 8 or len([n for n in t if n not in (1, 0)]) != 0: 
    raise ValueError('NOT 1 OR 0, or NOT CORRECT LENGTH') 


## The Conversion part 

a = l[0] 
b = l[1] 
c = l[2] 
d = l[3] 
e = l[4] 
f = l[5] 
g = l[6] 
h = l[7] 

p = a+b+c+d 
q = e+f+g+h 

y = hex(int(p, 2))[2:] 
z = hex(int(q, 2))[2:] 

## The Results part 

print 
print 'Results' 
print 'Binary: ',l 
print 'Hex: ',y+z 

我的整個轉換部分是出奇的長,因爲每當我嘗試轉換一個數字,在它的前面有0000它不打印0,我需要它打印0是否有辦法做到這一點,沒有做很長的過程

+0

請將所有作業問題標記爲家庭作業。 – agf

+0

Smartass答案是:'from binascii import hexlify'。如果我要爲作業評分,那也會得到滿分。 – Kimvais

+0

@Jonathan M的回答有這樣的內建函數。而且,使用'a = l [0],b = 1 [1]'似乎很糟糕,只需使用l [0],l [1]或更好地使用for循環。無論如何,'a,b,c,d,e,f,g,h = l'可以代替8個分配。你可以用下面的代碼替換10行:'p = sum(map(int,l [:4])); q = sum(map(int,l [4:]))'。 – utdemir

回答

2

如果我理解正確的話,你要打印出從得到的2位十六進制數二進制輸入l。你可以這樣做,如下所示:

print 'Hex: ', hex(int(l, 2))[2:].zfill(2) 
+0

不錯,但沒辦法擺脫x?它給了我例如0xf – jimbob

+0

Woops,你是對的。編輯。 – Clueless

+0

是的,非常感謝你 – jimbob

1

跳過所有的編碼。

首先,嘗試hex()http://docs.python.org/library/functions.html#hex

然後,檢查出format()http://docs.python.org/library/functions.html#format

+2

+1。如果要將字節轉換爲十六進制字符串(而不是整數),則還可以使用base64.b16encode和base64.b16解碼。 – ojrac

+0

這顯然是功課。他必須實際執行它。 – agf

+0

啊,是的,那兒有個家庭作業標籤。好眼睛......哦......等等......你把它放在那裏。大聲笑! –

0
print "%02x" % int(raw_input("Enter a number in binary: "), 2)