簡體   English   中英

將python字節“數組”轉換為“整數”數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM