2010-07-15 54 views
8

Tôi có một giá trị hex trong một chuỗi nhưChuyển đổi từ hex sang nhị phân mà không làm mất hàng đầu trăn 0 của

h = '00112233aabbccddee' 

Tôi biết tôi có thể chuyển đổi này để nhị phân với:

h = bin(int(h, 16))[2:] 

Tuy nhiên, điều này mất hàng đầu của 0. Có anyway để làm điều này chuyển đổi mà không làm mất của 0? Hoặc là cách tốt nhất để làm điều này chỉ để đếm số lượng hàng đầu 0 trước khi chuyển đổi rồi thêm nó vào sau đó.

+1

Có bất kỳ lý do đặc biệt mà bạn cần 'của 0'? –

+1

Tôi đang sử dụng giá trị h sau này làm khóa cho từ điển. Chìa khóa tuy nhiên có tất cả các hàng đầu của 0. – root

+0

Có lý do thuyết phục nào khi bạn sử dụng biểu diễn chuỗi nhị phân của giá trị thay vì một số nguyên cho khóa từ điển không? –

Trả lời

15

Tôi không nghĩ rằng có một cách để giữ các số 0 đứng đầu theo mặc định.

Mỗi chữ số hex chuyển thành 4 chữ số nhị phân, do đó độ dài của chuỗi mới phải chính xác gấp 4 lần kích thước của bản gốc.

h_size = len(h) * 4 

Sau đó, bạn có thể sử dụng .zfill để điền vào số không đến kích thước bạn muốn:

h = (bin(int(h, 16))[2:]).zfill(h_size) 
+0

Tôi nghĩ rằng điều này đã cho tôi 3 thêm 0 cho một số lý do – root

+0

Ah nevermind nó hoạt động hoàn hảo. Tôi đã không đếm số 0 trước số hex đầu tiên không. Cảm ơn. – root

+0

@root: không liên quan: không sử dụng lại tên 'h' cho những thứ khác nhau, ví dụ: sử dụng tên' bit' cho kết quả: 'bits = bin (int (h, 16)) [2:]. Zfill (len (h)) * 4) ' – jfs

2

Về cơ bản giống nhau nhưng đệm đến 4 bindigits mỗi hexdigit

''.join(bin(int(c, 16))[2:].zfill(4) for c in h) 
0

Một newbie python như tôi sẽ tiếp tục như vậy

datastring = 'HexInFormOfString' 

Đệm để chứa các số 0 trước nếu có, khi python chuyển đổi chuỗi thành Hex.

datastrPadded = 'ffff' + datastring 

Chuyển đổi giá trị đệm thành nhị phân.

databin = bin(int(datastrPadded,16)) 

Xóa 2 bit ('0b') mà python thêm để biểu thị nhị phân + 16 bit đệm.

databinCrop = databin[18:] 
0

Điều này chuyển đổi chuỗi hex thành chuỗi nhị phân. Vì bạn muốn chiều dài phụ thuộc vào bản gốc, điều này có thể là những gì bạn muốn.

data = "" 
while len(h) > 0: 
    data = data + chr(int(h[0:2], 16)) 
    h = h[2:] 
print h 
6

Điều này thực sự khá dễ dàng trong Python, vì nó không có giới hạn về kích thước của số nguyên. Chỉ cần thêm một số '1' vào chuỗi thập lục phân và cắt tương ứng '1' từ đầu ra.

>>> h = '00112233aabbccddee' 
>>> bin(int(h, 16))[2:] # old way 
'1000100100010001100111010101010111011110011001101110111101110' 
>>> bin(int('1'+h, 16))[3:] # new way 
'000000000001000100100010001100111010101010111011110011001101110111101110' 
+0

Bạn đang tìm kiếm chính xác điều này trong một giờ! –

0
hexa = '91278c4bfb3cbb95ffddc668d995bfe0' 
binary = bin(int(hexa, 16))[2:] 
print binary 
hexa_dec = hex(int(binary, 2))[2:] 
print hexa_dec 
Các vấn đề liên quan