2012-03-05 143 views
0

有很多示例代碼可以在幾行代碼中完成此操作。在Python 3.2中有一個庫可以在一次調用中做到這一點?如果不是,那麼最小代碼是做什麼的?Python - 將字符串「0xDE 0xAD 0xBE 0xEF」解析爲字節數組

我很高興能得到任何類似列表(可轉位和迭代器)結果的結果...

編輯:你們是快!我喜歡這一個:

byte_collection = bytes(int(x, 16) for x in some_string.split()) 
+1

爲什麼會出現有問題 「的幾行代碼?」鑑於您可能會將此代碼鎖定在某個函數中,解決方案的一行還是很多很重要嗎? – 2012-03-05 03:17:32

+0

接受的解決方案不需要定義我自己的方法來隱藏如何去做。在應用程序代碼中不必要地包裝標準python庫是我的寵兒。這只是沒有必要。我喜歡下面的解決方案,我接受並認爲沒有理由包裝它。 – 2012-03-06 00:41:48

回答

3
3>> bytes(int(x, 16) for x in '0xDE 0xAD 0xBE 0xEF'.split()) 
b'\xde\xad\xbe\xef' 
+0

這不適用於我的2.7.2 Python。 – 2012-03-05 03:24:56

+0

@Corey:沒有人說這是應該的。 – 2012-03-05 03:25:19

+0

只是爲了尋找那些可能會發現這一點的人。 – 2012-03-05 03:28:33

2

如果你想把它當作一個整數列表,這應該工作,假設s包含您的字符串:

[int(piece, 16) for piece in s.split()] 

如果你想把它當作一個字符串,則可以使用這樣的:

''.join(chr(int(piece, 16)) for piece in s.split()) 
3

的整數列表:

list_of_ints = [int(x, 16) for x in inputstr.split()] 

字節的字符串(ASCII字符):

string_of_bytes = ''.join(chr(int(x, 16)) for x in inputstr.split()) 

在Python 3:

string_of_bytes = bytes(int(x, 16) for x in inputstr.split()) 
+0

int()'理解'0x'無需將其去掉 – 2012-03-05 06:03:26

+0

@gnibbler好點。 – Amber 2012-03-05 06:08:40