2017-10-18 182 views
2

我剛剛開始使用python中的十六進制值,對於剛剛遇到的內容感到有些驚訝。我期望以下代碼首先打印一個十六進制字符串,然後打印一個十進制值。在Python中將十六進制值轉換爲十進制

輸入:

n = 0x8F033CAE74F88BA10D2BEA35FFB0EDD3 
print('Hex value for n is:', n) 
print('Dec value for n is:', int(str(n), 16)) 

輸出:

對於n

十六進制值:190096411054295805012706659640261275091

對於n

十二月值爲:8921116140846515089057635273465667902228615313

這怎麼可能2個不同的差異顯示不同的數字?我期望第一個數字是十六進制字符串,第二個數字是十進制數字,在這種情況下,第二個數值是多少?

回答

7

0x是一種用十六進制表示法輸入整數的方法。

>>> n = 0x8F033CAE74F88BA10D2BEA35FFB0EDD3 

這進制數爲實例化後直接被遺忘,但:

>>> n 
190096411054295805012706659640261275091 
>>> str(n) 
'190096411054295805012706659640261275091' 

所以,當你調用int(str(n), 16),Python的解釋'190096411054295805012706659640261275091'爲十六進制數:

>>> int(str(n), 16) 
8921116140846515089057635273465667902228615313 

您需要輸入原始的十六進制字符串:

>>> int("8F033CAE74F88BA10D2BEA35FFB0EDD3", 16) 
190096411054295805012706659640261275091 

,或者使用hex

>>> int(hex(n), 16) 
190096411054295805012706659640261275091 
+3

因此,我想,所述第二輸出是十進制,解釋爲十六進制(由數字位),並轉換回十進制。因此,這個數字更大。我對嗎? – Scheff

+0

@Scheff:的確如此。 –

+0

我試圖重現我的計算器,但數字有很多數字... ;-) – Scheff

相關問題