通过Python将IP转换为Hex

时间:2014-01-06 10:52:33

标签: python string python-2.7

我正在编写一个将IP转换为HEX的脚本。以下是我的剧本:

import string
ip = raw_input('Enter IP')
a = ip.split('.')
b = hex(int(a[0])) + hex(int(a[1])) + hex(int(a[2])) + hex(int(a[3]))
b = b.replace('0x', '')
b = b.upper()
print b

我的问题是对于像115.255.8.97这样的IP,我得到了这个:

回答来了:73FF861

预期答案:73FF0861

任何人都可以聪明地告诉我我犯了什么错误。

5 个答案:

答案 0 :(得分:13)

hex函数没有填充前导零。

>>> hex(8).replace('0x', '')
'8'

str.format02X格式规范一起使用:

>>> '{:02X}'.format(8)
'08'
>>> '{:02X}'.format(100)
'64'

>>> a = '115.255.8.97'.split('.')
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*map(int, a))
'73FF0861'

或者您可以使用binascii.hexlify + socket.inet_aton

>>> import binascii
>>> import socket
>>> binascii.hexlify(socket.inet_aton('115.255.8.97'))
'73ff0861'
>>> binascii.hexlify(socket.inet_aton('115.255.8.97')).upper()
'73FF0861'

答案 1 :(得分:1)

由于十六进制没有前导前导零,您可以使用zfill(2)

import string
ip = raw_input('Enter IP')
a = ip.split('.')
b = hex(int(a[0]))[2:].zfill(2) + hex(int(a[1]))[2:].zfill(2) + hex(int(a[2]))[2:].zfill(2) + hex(int(a[3]))[2:].zfill(2)
b = b.replace('0x', '')
b = b.upper()
print b

我们只使用[2:]取消十六进制数字(删除'0x'),然后我们只在需要时添加2个前导零。

示例输出:

Enter IP 192.168.2.1
C0A80201

示例输出:

Enter IP 115.255.8.97
73FF0861

EDIT1:

通过@volcano请求你可以用列表推导替换:

b = "".join([hex(int(value))[2:].zfill(2) for value in a])

答案 2 :(得分:1)

series: [{
  name: 's1',
  data: [10, 10, 10, 10, 10, 10]
}, {
  name: 's2',
  data: [1, 1, 1, 1, 1, 1]
}, {
  name: 's3',
  data: [-2, -2, -2, -2, -2, -2],
  enabledMouseTracking: false,
  color: 'none'
}]

答案 3 :(得分:0)

从python v3.5开始,您可以这样做:

import socket
socket.inet_aton(ip).hex()

https://docs.python.org/3/library/stdtypes.html#typebytes

答案 4 :(得分:-1)

>>>import binascii
>>>import socket
>>>binascii.hexlify(socket.inet_aton('115.255.8.97'))
'73ff0861'
>>>binascii.hexlify(socket.inet_aton('10.255.8.97'))
'0aff0861'

在上面的IP到十六进制转换输出中,如果输出以'0'开头。 0aff0861然后我想删除0和输出应该看起来像aff0861。转换中是否有任何直接方法。