簡體   English   中英

在Python中從int到Byte的轉換不以十六進制表示

[英]Int to Byte conversion not representing in hexadecimal in Python

我在理解python如何在int和byte數據類型之間進行轉換時遇到一些困難,尤其是為什么它與將其表示為十六進制數字不一致。

考慮以下將數字13轉換為2字節表示形式的情況:

>>> (13).to_bytes(2, byteorder='big')
b'\x00\r'

為什么在第二個字節位置使用字符r

在這種情況下,我期望它輸出:

b'\x00\xD'

在兩種情況下都做相反的操作將輸出正確的答案。

>>> int.from_bytes(b'\x00\x0D', byteorder='big')
13
>>> int.from_bytes(b'\x00\r', byteorder='big')
13

兩者都有正確的字節數

>>> len(b'\x00\x0D')
2
>>> len(b'\x00\r')
2

有一些特殊的轉義序列非常常見,以致於不能用十六進制值明確表示:

\a <-> \x07  alert
\b <-> \x08  backspace
\t <-> \x09  tab (horizontal)
\n <-> \x0A  new line
\v <-> \x0B  vertical tab
\f <-> \x0C  formfeed
\r <-> \x0D  carriage return
\" <-> \x22  "
\' <-> \x27  '
\\ <-> \x5C  \

您可以在此處找到轉義序列的完整列表及其工作方式。 請注意,在C語言中也有\\0 <-> \\x00

bytes和十六進制表示之間存在差異。 bytes是一種數據類型; 十六進制是一種在屏幕上表示位模式的方法。

bytes是8位值的不可變序列。 解釋器在可能的情況下將其顯示為字符或字符串轉義序列,在不可能的情況下以十六進制顯示。 相應的文字稱為字節字符串 換句話說,十六進制是一種不得已的方法。 您可以使用十六進制表示法構造bytes b'ABC'b'\\x41\\x42\\x43'但解釋器仍將其報告為b'ABC' 這與處理引號的方式沒有什么不同:

>>> a = "ABC"
>>> a
'ABC'
>>> a = 'AB\'C'
>>> a
"AB'C"

解釋器具有一種顯示其數據的標准方式,而無需考慮您最初輸入該數據的方式。 這不是往返失敗,因為沒有信息丟失。 您所看到的就是等效的表示形式,而不是相同的表示形式。

如果要查看十六進制表示形式,則應明確要求它,而不是依賴於解釋器顯示特定數據類型的默認方式。

>>> fmt = '\\x{0:02X}\\x{1:02X}'
>>> print(fmt.format(*((13).to_bytes(2, byteorder='big'))))
\x00\0D

暫無
暫無

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

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