在python中将IPv4地址转换为十六进制

Posted

技术标签:

【中文标题】在python中将IPv4地址转换为十六进制【英文标题】:IPv4 Address to Hex in python 【发布时间】:2017-11-27 02:37:14 【问题描述】:

我正在尝试创建一个程序,该程序采用字符串 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 设为整数。

【问题讨论】:

Convert hex string to int in Python的可能重复 【参考方案1】:

使用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'

【讨论】:

输出不能是字符串。 @GBroad,我不明白。什么意思? 使用该代码,输出是一个字符串。我的程序不能使用十六进制字符串。我在我的程序中拥有的其他十六进制值不是字符串,我无法将字符串输出转换为我的程序可以使用的值。 @GBroad,你确定你使用的是 Python 2.7 吗?如果您使用的是 Python 3.x,请改用 binascii.hexlify(socket.inet_aton('115.255.8.97')).decode().upper()。 (解码将字节转换为字符串) 我的程序在 python 2.7 上运行。我在将 IP 地址转换为十六进制时没有遇到问题,我在输出类型方面遇到了问题。在我的程序的某些部分,我分配了不是字符串的十六进制值的变量,所以我不能让输出是字符串。

以上是关于在python中将IPv4地址转换为十六进制的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中将十六进制转换为十进制? [复制]

在 Python 中将十六进制转换为 RGB 值

在 Python 3 中将字节转换为十六进制字符串的正确方法是啥?

在python中将字符串转换为十六进制

你如何在Python中将十六进制转换为三元组?

在Python 3中将十六进制字符串(python 2)转换为带有十六进制数字的字节