Python - 将Hex转换为INT / CHAR

时间:2011-09-29 09:22:35

标签: python hex decode

我很难将十六进制更改为int / char(最好是char)。通过网站; http://home2.paulschou.net/tools/xlate/我将C0A80026的十六进制输入到十六进制框中,在DEC / CHAR框中它正确输出我希望它包含的IP。

这些数据是从外部数据库中提取的,我不知道它是如何保存的,所以我必须使用的是十六进制字符串本身。

我尝试使用binascii.unhexlify函数来查看是否可以对其进行解码,但我担心我可能对十六进制没有足够的理解来欣赏我正在做的事情。

尝试仅使用int()强制转换进行打印也未产生所需的结果。我需要一些方法将该十六进制字符串(或一个类似的)转换为原始IP。

更新:对于将来遇到此问题的任何人,我稍微修改了以下答案,以便通过使用提供准确的打印输出作为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))

6 个答案:

答案 0 :(得分:7)

一种简单的方法

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

如果您更喜欢列表推导

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

答案 1 :(得分: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]

这可以概括,但我会把它留作练习。

答案 2 :(得分:4)

您可能还需要chr功能:

chr(65) => 'A'

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我希望这是你所期望的:

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

答案 5 :(得分:0)

为了将十六进制字符串转换为人类可读的字符串,您可以像这样转义每个HEX字符:

>>> '\x68\x65\x6c\x6c\x6f'
'hello'

从字符串中你可以轻松地循环到INT列表:

>>> hextoint = [ord(c) for c in '\x68\x65\x6c\x6c\x6f']
>>> _
[104, 101, 108, 108, 111]

你的例子:

>>> [ord(c) for c in '\xC0\xA8\x00\x26']
[192, 168, 0, 38]