2012-02-09 208 views
77

我有一些Perl代碼,其中十六進制()函數將十六進制數據轉換爲十進制。我該怎麼做Python如何在Python中將十六進制轉換爲十進制?

+1

你確定你要的數據爲「十進制」轉換? Perl函數只是將十六進制字符串轉換爲整數,而不是十進制字符串。 – 2012-02-09 12:10:44

+0

@SvenMarnach我使用perl十六進制()手冊http://www.misc-perl-info.com/perl-hex.html「此功能: 作爲參數一個十六進制字符串(或一個表達式後評估將返回一個十六進制字符串) 將返回小數對應的值「 – 2012-02-09 12:18:27

+1

@Sir D:該文章是非常糟糕的措辭。正如Sven所說,'hex'將十六進制字符串轉換爲整數值(以二進制形式存儲在內部,但基本上只是一個沒有基數的數值)。對'print'的調用將該值轉換爲十進制字符串並打印出來。 – Borodin 2012-02-09 12:32:25

回答

139

如果 「十六進制數據」 你指的是格式的字符串

s = "6a48f82d8e828ce82b82" 

可以使用

i = int(s, 16) 

將其轉換爲整數,

str(i) 

轉換它到一個十進制字符串。

+14

該死的我愛Python。 – 2015-09-25 18:18:04

+0

對於負數的十六進制數字,這不起作用。 – 2016-05-20 04:21:30

+0

@EricWang這對於負數很合適:http://ideone.com/IHOQvp。除非你有一個用固定寬度的二進制補碼格式編碼的負數,但這與問題不同。 (提示:在這種情況下使用'struct'模塊。) – 2016-05-20 11:32:46

26
>>> int("0xff", 16) 
255 

>>> int("FFFF", 16) 
65535 

Read the docs

+2

int(0xff)會做正確的事情。如果它作爲字符串傳遞,它只需要一個明確的基礎。 – cassm 2016-01-15 17:11:01

12

你可以使用一個字面的eval:

>>> ast.literal_eval('0xdeadbeef') 
3735928559 

或者只是指定基作爲參數傳遞給int

>>> int('deadbeef', 16) 
3735928559 
+0

這很完美! =] – GalDude33 2016-08-04 12:54:13

相關問題