[英]Why Python 3.6.4 returns unexpected characters from to_bytes() method?
有人可以向我解釋為什么傳遞給to_bytes()方法的某些整數給出奇怪的結果嗎?
>>> b = 5152
>>> b.to_bytes(2, byteorder='big')
b'\x14 '
>>> b = 5153
>>> b.to_bytes(2, byteorder='big')
b'\x14!'
>>> b=16592
>>> b.to_bytes(2, byteorder='big')
b'@\xd0'
如何解釋'@''!' ''? 對於16592,我期望b'\\ x40 \\ xd0'。
我閱讀了Python 3文檔,並且那里的所有示例都能正常工作。 Python 3 to_byte()描述 。
>>> b=1024
>>> b.to_bytes(2, byteorder='big')
b'\x04\x00'
我還嘗試了這個Stackoverflow帖子的示例,它的工作原理很吸引人。
>>> b = 1245427
>>> b.to_bytes(3, byteorder='big')
b'\x13\x00\xf3'
附加信息:
Python 3.6.4 (default, Feb 1 2018, 11:06:09)
[GCC 7.2.1 20170915 (Red Hat 7.2.1-2)] on linux
程序在Fedora 27上運行。
如果解釋為ASCII的字節值是可打印的,則該字節的repr()
是可打印的字符。
由於@
的ASCII值為0x40,因此這兩個值等效為b'@'
, b'\\x40'
。
通過演示可能比解釋更容易看到:
>>> b'\x40'
b'@'
但是無論表示形式如何,該對象都是一個長度為1的bytes
,第一個bytes
的值為64:
>>> b'\x40'[0] == 64
True
>>> b'@'[0] == 64
True
回到您的示例,如果您想知道每個字節的十六進制值,則可以使用bytes.hex()
:
>>> b=16592
>>> b.to_bytes(2, byteorder='big').hex()
'40d0'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.