1

我正在尝试创建一个程序,该程序采用字符串 IPv4 地址并将其转换为十六进制整数。我的程序可以工作,但是十六进制值是字符串的形式,所以我的程序返回值错误(例如:“invalid literal for int() with base 10”,或“expected type int() or float().. 。”)。

example input: 115.255.8.97
example output: 73FF0861


#IPv4 to Hex
splitip = sys.argv[2].split('.')
hexint = hex(int(splitip[0]))[2:].zfill(2) + hex(int(splitip[1]))[2:].zfill(2) + hex(int(splitip[2]))[2:].zfill(2) + hex(int(splitip[3]))[2:].zfill(2)
hexint = hexint.replace('0x','')

任何帮助,将不胜感激!

注意:我的问题是 hexint 变量是一个字符串。我的程序需要将值 ad 设为整数。

4

1 回答 1

0

用于socket.inet_aton将点分 IPv4 地址转换为字节串。

>>> import socket
>>> socket.inet_aton('115.255.8.97')
's\xff\x08a'

然后,将值传递binascii.hexlify给以获取二进制字符串的十六进制表示。

>>> import binascii
>>> binascii.hexlify(socket.inet_aton('115.255.8.97'))
'73ff0861'
>>> binascii.hexlify(socket.inet_aton('115.255.8.97')).upper()
'73FF0861'
于 2017-06-23T14:02:21.270 回答