[英]Convert python byte “array” to int "array
這是我在python中的第一個代碼,遇到了這個問題:
我正在讀取一個二進制文件為:
def read_file(file):
with open(file, "rb") as f:
frame = f.read()
print(type(frame)) #out = <class 'bytes'>
return frame
我需要將所有向量都轉換為int值,而不是將它們用作字節。
打印后,我得到這樣的東西:
print(frame[0:10])
b'\xff\xff\xff\xffXabccc'
但是,如果我僅打印通過一個位置,則會得到以下信息:(整數值是正確的,但我只是使用函數print來獲取它們)
print(frame[0])
255
print(frame[1])
255
print(frame[2])
255
print(frame[3])
255
print(frame[4])
88
print(frame[5])
97
print(frame[6])
98
print(frame[7])
99
print(frame[8])
99
print(frame[9])
99
print(frame[10])
98
問題是:如何一步一步轉換數組的所有位置? 我想運行代碼
print(frame[0:10])
並得到像
[255, 255, 255, 255, 88, 97, 98, 99 ,99, 99, 98]
注意:此解決方案僅適用於Python3。有關Python 2解決方案,請參見Scott Hunter的答案。
您可以使用列表理解來做到這一點:
In [1]: frame = b'\xff\xff\xff\xffXabccc'
In [2]: int_values = [x for x in frame]
In [3]: print(int_values)
[255, 255, 255, 255, 88, 97, 98, 99, 99, 99]
要確認這些確實存儲為整數值,您可以使用:
In [4]: print([type(x) for x in int_values])
[<class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>,
<class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>]
如果要使用整數值列表,而不僅僅是打印它們,則可以使用:
[ord(x) for x in frame]
最簡單,最明顯的方法是將frame
對象傳遞給列表構造函數。 不需要列表理解:
>>> frame = b'\xff\xff\xff\xffXabccc'
>>> list(frame)
[255, 255, 255, 255, 88, 97, 98, 99, 99, 99]
您可以在Python中使用列表推導
print [frame[i] for i in xrange(0, 11)]
有了這個,你會得到一個打印清單
python2或3的一種解決方案是:
list(bytearray(frame))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.