我很难将十六进制更改为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))
答案 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]