对字符串变量执行按位运算

时间:2015-06-25 20:37:47

标签: types bit-manipulation operand

背景:我是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函数中的二进制文件?

非常感谢, 菲尔

1 个答案:

答案 0 :(得分:0)

bin()函数用于将整数转换为二进制值的字符串表示形式,例如:

print bin(14)

输出:

0b1110

在您的代码中,ipo1snmo1已经是整数,因此您已经可以对它们执行二进制操作而无需转换,bin()不是必需的:

def nwaddrcalc(ip,snm):
ipo1 = int(ip.o1)   
snmo1 = int(snm.o1) 
nwaddr.o1 = ipo1 & snmo1
print ipo1