簡體   English   中英

為什么`(33).to_bytes(2,'big')`返回'b'\\ x00!'`而不是'b'\\ x00 \\ x21'`?

[英]Why does `(33).to_bytes(2, 'big')` return `b'\x00!'` instead of `b'\x00\x21'`?

我在Python中將int轉換為字節時遇到問題。

這工作 -

>>> (1024).to_bytes(2, 'big')
b'\x04\x00'  

然而,這並不像我預期的那樣有效 -

>>> (33).to_bytes(2, 'big')
b'\x00!'

我不明白的是什么?

十進制值33映射到角色! 通過ASCII標准,所以解釋器可以在不使用轉義碼的情況下顯示它:

>>> b'\x21' * 3
b'!!!'

當打印一個字節對象時,python將其視為一個字符序列(每個字符都保存為一個字節,每個字節通常使用一個8位的存儲器,映射成2個十六進制數字值,例如0x21 => 0b 0010 0001 => 33 ),所以帶有相應可打印ASCII字符的值顯示為ASCII字符,其余值用十六進制值表示(格式為\\xDD )。

根據文檔 - > https://docs.python.org/3.3/library/stdtypes.html

 >>> (1024).to_bytes(2, byteorder='big')
 b'\x04\x00'
 >>> (1024).to_bytes(10, byteorder='big')
 b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
 >>> (-1024).to_bytes(10, byteorder='big', signed=True)
 b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
 >>> x = 1000   
 >>> x.to_bytes((x.bit_length() // 8) + 1, byteorder='little')
 b'\xe8\x03'

你不明白! 是ASCII字符33,相當於\\x21 這個字節串正是你要求的字節串; 它只是沒有按照你期望的方式顯示。

暫無
暫無

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

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