2013-10-08 15 views
3

我有一個列表,它是字符數,字節的混合物,它看起來像這樣:如何將字符和字節列表轉換爲純字節列表?

myData = ['a', '\x65', 'B', '\x66\x69', 'C'] 

我想這個列表轉換成字節數組,所以這樣的:

myByteArray = ['\x61' , '\x65', '\x42', '\x66', '\x69', '\x43'] 

我已經嘗試到目前爲止是對myData的簡單的顯示 -

myData = ['a', '\x65', 'B', '\x66\x69', 'C'] 
print " ".join(hex(ord(n)) for n in myData) 

由於存在恰好是兩個字節的數組中的元素,它引發此錯誤:

Traceback (most recent call last): 
    File "./test.py", line 3, in <module> 
    print " ".join(hex(ord(n)) for n in myData) 
    File "./test.py", line 3, in <genexpr> 
    print " ".join(hex(ord(n)) for n in myData) 
TypeError: ord() expected a character, but string of length 2 found 

如何將我的原始列表myData轉換爲字節數組myByteArray?

+0

有沒有辦法讓Python來描述一個普通的ASCII字符作爲轉義序列,除非你把它變成等價的字符串。 ''a''和''\ x61''是相同的字符,並且Python將始終將其打印爲''a''。 –

回答

1

您可以合併所有這些,再次分裂,以獲得單個字符,如:

output_list = [hex(ord(c)) for c in ''.join(myData)] 

想出來,

>>> myData = ['a', '\x65', 'B', '\x66\x69', 'C'] 
>>> [hex(ord(c)) for c in ''.join(myData)] 
['0x61', '0x65', '0x42', '0x66', '0x69', '0x43'] 
+0

我懷疑如果你在ASCII範圍之外輸入一個字節會失敗。 –

+0

這適用於ASCII範圍之外的字節值。 – user791953

+0

@MarkRansom我嘗試了一些非ASCII字符,它似乎工作 –

1

如果你真的想可變字節list,而不是一個不可變的單字符串,你可以這樣做:

myData = ['a', '\x65', 'B', '\x66\x69', 'C', '\xff'] 

myByteArray = bytearray(''.join(myData)) 

print " ".join(hex(byte) for byte in myByteArray) 
# 0x61 0x65 0x42 0x66 0x69 0x43 0xff 

I ˚F一個字符的list一個字符串是確定的,所有你需要的是:

myByteArray = list(''.join(myData))