2011-09-29 108 views
6

我在將十六進制更改爲int/char(char最好)時遇到了一些困難。通過網站; http://home2.paulschou.net/tools/xlate/我在十六進制框中輸入C0A80026的十六進制數,在DEC/CHAR框中它正確地輸出了我期望它包含的IP。Python - 將Hex轉換爲INT/CHAR

這些數據是從外部數據庫中提取的,我不知道它是如何保存的,所以我必須使用的是十六進制字符串本身。

我曾嘗試使用binascii.unhexlify函數來查看我是否可以解碼它,但我擔心我可能沒有足夠的十六進制理解來欣賞我正在做的事情。

只使用int()強制轉換打印也沒有產生所需的結果。我需要一些方法來從該十六進制字符串(或類似的)轉換爲原始IP。

更新:對於任何未來遇到此問題的人,我稍微修改了下面的答案,以便通過使用提供確切的打印輸出;

dec_output = str(int(hex_input[0:2], 16)) + "." + str(int(hex_input[2:4], 16)) + "." + str(int(hex_input[4:6], 16)) + "." + str(int(hex_input[6:8], 16)) 
+0

[轉換十六進制字符串的可能重複在Python中爲int](http://stackoverflow.com/questions/ 209513/convert-hex-string-to-int-in-python) –

+0

該解決方案不適用於我的問題 – Draineh

+0

請準確解釋重複問題不是重複的。細節很重要。 「對我的問題不起作用」太模糊,無法表達任何內容。 –

回答

6

如果你想從這個獲得4個獨立的數字,然後把它作爲4個獨立的數字。你不需要binascii

hex_input = 'C0A80026' 
dec_output = [ 
    int(hex_input[0:2], 16), int(hex_input[2:4], 16), 
    int(hex_input[4:6], 16), int(hex_input[6:8], 16), 
] 
print dec_output # [192, 168, 0, 38] 

這可以是概括性的,但我會把它作爲練習留給你。

+0

完美,謝謝 – Draineh

0

我希望這是你所期望的:

hex_val = 0x42424242  # hexadecimal value 
int_val = int(hex_val) # integer value 
str_val = str(int_val) # string representation of integer value 
+0

文字'0x4242422'已經創建了一個整數,'int(hex_val)'是多餘的。 –

4

您可能還需要Chr函數:

chr(65) => 'A' 
+0

只接受整數問題清楚地表明,用戶需要在int/char(不是int到char)中轉換十六進制,而chr只接受整數,因此這不是解決方案。 –

1
>>> htext='C0A80026' 
>>> [int(htext[i:i+2],16) for i in range(0,len(htext),2)] 
# [192, 168, 0, 38] 
6

一個簡單的方法

>>> s = 'C0A80026' 
>>> map(ord, s.decode('hex')) 
[192, 168, 0, 38] 
>>> 

,如果你喜歡列表理解

>>> [ord(c) for c in s.decode('hex')] 
[192, 168, 0, 38] 
>>> 
+0

不錯的一個。我會將它寫成一個列表理解,但這純粹是一種品味。我喜歡使用'decode'和'ord'。 – neil

+0

謝謝@neil。我也喜歡列表解析。 –