背景:我是python的新手,我正在尝试创建一种子网计算器,用户输入主机的IP地址和子网掩码,python计算并返回该主机的网络地址。
此时我的问题是对每个八位位组执行按位运算,这是迄今为止的代码:
class Address(object):
#o(number) in my code stands for octet, as in octets 1 through 4 of each address
def __init__(self,full,o1,o2,o3,o4):
self.full = full
self.o1 = o1
self.o2 = o2
self.o3 = o3
self.o4 = o4
#this function's purpose is to split the string input into 4 octets for each address object
def iptobinaryoct(data):
octet = 1
o1 = ''
o2 = ''
o3 = ''
o4 = ''
for x in data.full:
if x != ".":
if octet == 1:
data.o1 += x
elif octet == 2:
data.o2 += x
elif octet == 3:
data.o3 += x
elif octet == 4:
data.o4 += x
else:
octet += 1
def nwaddrcalc(ip,snm):
ipo1 = int(ip.o1)
snmo1 = int(snm.o1)
nwaddr.o1 = bin(ipo1) & bin(snmo1)
print ipo1
ip = Address(raw_input("IP: "),'','','','')
snm = Address(raw_input("SNM: "),'','','','')
nwaddr = Address('','','','','')
iptobinaryoct(ip)
iptobinaryoct(snm)
nwaddrcalc(ip,snm)
问题在于我不能将我正在执行按位操作的变量视为二进制类型,python将它们解释为字符串,因此无法对它们执行任何计算,是否有办法让这些变量解释为nwaddrcalc函数中的二进制文件?
非常感谢, 菲尔
答案 0 :(得分:0)
bin()函数用于将整数转换为二进制值的字符串表示形式,例如:
print bin(14)
输出:
0b1110
在您的代码中,ipo1
和snmo1
已经是整数,因此您已经可以对它们执行二进制操作而无需转换,bin()
不是必需的:
def nwaddrcalc(ip,snm):
ipo1 = int(ip.o1)
snmo1 = int(snm.o1)
nwaddr.o1 = ipo1 & snmo1
print ipo1