簡體   English   中英

為什么Python 3.6.4從to_bytes()方法返回意外字符?

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

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