[英]Bytearray in Python 2 is not behaving as expected
我在玩python 2.7.3中的bytearray類型,並注意到這種奇怪的行為:
將整數參數傳遞給其構造函數會創建一個字節數組,其大小等於用零字節填充的整數:
>>> s = bytearray(15)
>>> s
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
但是,如果我嘗試創建由我手動設置的字節的字節數組, 則構造函數似乎會忽略/跳過我創建的某些字節 :
>>> s = bytearray(b'\x34\x78\x98\xFF\xFF')
>>> s
bytearray(b'4x\x98\xff\xff')
為什么會這樣呢? 這是錯誤嗎? 還是我錯過了什么? python文檔不是很有啟發性的 。
沒什么奇怪的,所有字節都還在。 放松! :)
產生這種混淆的原因是表示方式已進行了優化:將值表示可打印字符的字節打印為這些字符。 這使得它們在輸出中僅采用單個字符,而不是四個。
它正在按照它說的去做:
\\x34
是字符4
,這就是為什么緩沖區以' 4
'開頭的原因 \\x78
是字符x
,這就是為什么' 4
'之后有' x
'的原因 \\x98\\xff\\xff
均保持原樣。 請注意len(s)
打印5。
史詩般的圖形表示:
+---+---+------+------+------+
s = | 4 | x | \x98 | \xff | \xff |
+---+---+------+------+------+
它按照文檔應該做的:
如果它是整數,則數組將具有該大小,並將使用空字節初始化。
當你給它15.那就是它所做的。 所以那里沒什么奇怪的。
如果是字符串,則還必須提供編碼(以及可選的錯誤)參數; 然后,bytearray()使用str.encode()將字符串轉換為字節。
當你給它你的字符串。 您未提供編碼或錯誤參數,這帶來了默認值。 默認情況下, \\x34
變為4
, \\x78
變為x
。 \\x98
和\\xFF
在ascii中沒有表示形式,因此保留為字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.