Python - 将十六进制转换为整数/字符
我在把十六进制数转换成整数或字符(最好是字符)时遇到了一些困难。在这个网站上;http://home2.paulschou.net/tools/xlate/,我把十六进制数C0A80026输入到十六进制框里,结果在十进制/字符框里正确地输出了我预期的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 个回答
5
你可能还需要用到 chr 函数:
chr(65) => 'A'
9
一种简单的方法
>>> s = 'C0A80026'
>>> map(ord, s.decode('hex'))
[192, 168, 0, 38]
>>>
如果你喜欢用列表推导式
>>> [ord(c) for c in s.decode('hex')]
[192, 168, 0, 38]
>>>
12
如果你想从中得到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]
这个方法可以更普遍地应用,但我就不多说了,留给你自己去练习。