簡體   English   中英

如何從 Python 中的字節列表中獲取最后一個字節項?

[英]How to get the last byte item from a bytes list in Python?

我有一個字節列表,想要獲取最后一項,同時保留其字節類型。 使用 [-1] 它給出一個 int 類型,所以這不是一個直接的解決方案。

示例代碼:

x = b'\x41\x42\x43'
y = x[-1]
print (y, type(y))
# outputs:
67 <class 'int'>

對於任意索引,我知道該怎么做:

x = b'\x41\x42\x43'
i = 2 # assume here a valid index in reference to list length
y = x[i:i+1]
print (y, type(y))
# outputs:
b'C' <class 'bytes'>

可能我可以計算列表長度,然后指向一個絕對長度為 1 的數字,而不是相對於列表結尾。

但是,有沒有更優雅的方法來做到這一點? (即類似於簡單的 [-1]) 我也無法想象如何從列表末尾反向調整 [i:i+1] 原則。

我認為您感興趣的方法有多種:

someBytes[-1:]

編輯:我只是隨機決定詳細說明發生了什么以及為什么會這樣。 A bytes object 是不可變的任意 memory 緩沖區,因此 bytes object 的單個元素是一個字節,最好用 int 表示。 這就是為什么 someBytes[-1] 將是緩沖區中的最后一個 int 的原因。 當您出於任何原因(模式匹配、處理 ascii 數據並且不費心轉換為字符串)將字節 object 用作字符串時,這可能會違反直覺,因為 python 中的字符串(或迂腐的 str)代表文本數據的概念,並且不依賴於任何特定的二進制編碼(盡管它默認為 UTF-8)。 所以“hello”的最后一個元素是“o”,它是一個字符串,因為 python 沒有單個字符類型,只有長度為 1 的字符串。因此,如果您將字節 object 視為 ZCD69B4957F06CD818D7BF3D61980E2 you're treating it like a string you want a bytes object of length 1. So this line tells python to return a slice of the bytes object from the last element to the end of the bytes object which results in a slice length one containing only字節 object 和字節 object 中的最后一個值是字節 object。

您可以將該 int 簡單地轉換回bytes object:

>>> z = bytes([y])
>>> z == b'C'
True

...如果您無法輕松地將值作為整數獲取,例如因為另一個 function 您無法控制以這種方式返回它們。

如果你有:

x = b'\x41\x42\x43'

然后你會得到:

>>> x
b'ABC'

正如你所說, x[-1] 會給你 Ord() 值。

>>> x[-1]
67

但是,如果您想獲得 this 的值,您可以給出:

>>> x.decode()[-1]
'C'

如果您確實想獲得值 43,那么您可以按如下方式給出:

>>> "{0:x}".format(x[-1])
'43'

上面的例子

>>> z = bytes([y])
>>> z == b'C'
True

同樣你可以得到

x.strip()[-1:]

Output

b'C'

所以,

bytes(b'\x41\x42\x43')

b'ABC'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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