2015-06-19 54 views
2

因此,我一直在撞牆的過程中撞上了太久,看起來應該是一次簡單的數據轉換。我正在寫python並傳遞給另一個模塊一個十六進制值,該值用一個包裝器轉換爲c類型uint_64t。問題是我通過python庫argparse得到這個十六進制值。例如,當它接受這個值時,使用值0x3f,將其保存爲一個字符串。如果我嘗試施放此爲int它拋出的錯誤:將Python字符串轉換爲十六進制

"ValueError: invalid literal for int() with base 10: '0x3f'" 

但是如果我創建了一個變量十六進制= 0x3F的,當我把它打印出來,它給了我相應的整數值。 (這是偉大的,因爲我創建一個uint)我只是混淆瞭如何進行轉換從字符串到int如果一個強制轉換不起作用。我已經看到很多關於將字符串轉換爲十六進制值的例子(換句話說,將ASCII字符串'0x3f'的每個單獨字符並給它一個十六進制值),但是我一直沒能找到一個例子我正在尋找的情況。道歉,如果我提出了一次又一次的回答。

回答

5

嘗試指定的int是在基地16:

>>> int("0x3f", 16) 
63 

你也可以使用ast.literal_eval,這應該是能夠讀取,可以用來作爲文字的整數任何字符串。只要前綴0x存在,您甚至不必爲其指定基準。

>>> import ast 
>>> #hexadecimal 
>>> ast.literal_eval("0x3f") 
63 
>>> #binary 
>>> ast.literal_eval("0b01010") 
10 
>>> #octal 
>>> ast.literal_eval("0712") 
458 
>>> #decimal 
>>> ast.literal_eval("42") 
42 
+0

這誰幹的,我想我需要磨練我的Python技能! (雖然我的谷歌搜索技能可能會有更好的改進!) – kennedyl

2

int帶有一個可選的第二個參數,這是使用用於轉換的數值基礎。默認值是10(十進制轉換),但你可以將其更改爲16(十六進制爲)或0(基於前綴自動轉換):

>>> int('0b1010', 0) 
10 
>>> int('0x3f', 0) 
63 
>>> int('0o777', 0) 
511 
>>> int('1234', 0) 
1234 
相關問題