2024-10-01 09:19:37 发布
网友
我正在尝试执行以下操作:
firstoctet * 256 + secondoctet = * 256 + thirdoctet = * 256 + fourthoctet = x
以这个为例:
有人能提供一个方法来说明如何做到这一点吗?数学序列没有问题,我只是不确定如何从小数点中取出八位字节值来执行数学函数。在
提前谢谢!在
将IP地址字符串转换为如下整数列表:
ip_as_string = "64.233.187.99" ip_as_ints = [int(a) for a in ip_as_string.split('.')]
ip_as_ints将是[6423318799]。在
ip_as_ints
我猜您要执行的数学表达式是RPN,用于将字节序列从256位表示转换为单个数字。(感谢影游侠的展示)。您可以通过以下方式轻松获得该单个数字:
x是1089059683。在
如果您使用的是python3.3或更高版本,您可以利用the ^{} module来避免重新发明轮子,它甚至提供了一个有用的视图bytes,int.from_bytes可以有效地转换为实际的int:
bytes
int.from_bytes
int
from ipaddress import IPv4Address ip_as_addr = IPv4Address("64.233.187.99") ip_as_int = int.from_bytes(ip_as_addr.packed, 'big') print(ip_as_int, hex(ip_as_int))
获取1089059683 0x40e9bb63的输出。在
1089059683 0x40e9bb63
如果你真的愿意的话,你可以手工完成,我只喜欢上面代码的自我文档化。如果Py 3.3+不是一个选项,则可以通过以下方式获得相同的结果:
这只需将八位字节分开,将其转换为int,然后将每个八位字节左移24、16、8和0位(以便正确对齐八位字节),然后允许sum将它们组合成一个int。在
sum
将IP地址字符串转换为如下整数列表:
ip_as_ints
将是[6423318799]。在我猜您要执行的数学表达式是RPN,用于将字节序列从256位表示转换为单个数字。(感谢影游侠的展示)。您可以通过以下方式轻松获得该单个数字:
^{pr2}$x是1089059683。在
如果您使用的是python3.3或更高版本,您可以利用the ^{} module 来避免重新发明轮子,它甚至提供了一个有用的视图
bytes
,int.from_bytes
可以有效地转换为实际的int
:获取
1089059683 0x40e9bb63
的输出。在如果你真的愿意的话,你可以手工完成,我只喜欢上面代码的自我文档化。如果Py 3.3+不是一个选项,则可以通过以下方式获得相同的结果:
^{pr2}$这只需将八位字节分开,将其转换为
int
,然后将每个八位字节左移24、16、8和0位(以便正确对齐八位字节),然后允许sum
将它们组合成一个int
。在相关问题 更多 >
编程相关推荐