簡體   English   中英

Python 2中的字節數組表現不正常

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

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