在python中是否有一种较短的方法来增加bd_地址?

在python中是否有一种较短的方法来增加bd_地址?,python,python-3.x,Python,Python 3.x,我编写了一个python函数,将BT设备BD_ADDR增加任意值,但我的函数最多只能工作到xx:xx:xx:FE:FF。例如,原始BD_ADDR=AA:BB:CC:DD:EE:FF->增加1个BD_ADDR=AA:BB:CC:DD:EF:00。还有没有一种不使用all if语句的较短方法?如有任何建议,将不胜感激。 以下是脚本: def ba_incr(mac,incr): old_bytes = mac[12:].split(":") if (old_bytes

我编写了一个python函数,将BT设备BD_ADDR增加任意值,但我的函数最多只能工作到xx:xx:xx:FE:FF。例如,原始BD_ADDR=AA:BB:CC:DD:EE:FF->增加1个BD_ADDR=AA:BB:CC:DD:EF:00。还有没有一种不使用all if语句的较短方法?如有任何建议,将不胜感激。 以下是脚本:

def ba_incr(mac,incr):
        old_bytes = mac[12:].split(":")
        if (old_bytes[0] != "00"):
             if (old_bytes[0] != "01" and old_bytes[0] != "0F"):
                  old_hex = str(old_bytes[0] + old_bytes[1])
                  incr_hex = hex(int(str(int(old_hex, base=16) + incr)))[2:]
                  new_bytes = str(incr_hex[:2]) + ":" + str(incr_hex[2:])
             elif (old_bytes[0] == "0F" and old_bytes[1] == "FF") :
                  old_hex = str(old_bytes[0] + old_bytes[1])
                  incr_hex = hex(int(str(int(old_hex, base=16) + incr)))[2:]

                  new_bytes = str(incr_hex[:2]) + ":" + str(incr_hex[2:])
                else:
                        old_hex = str(old_bytes[0] + old_bytes[1])
                        incr_hex = hex(int(str(int(old_hex, base=16) + incr)))[2:]
                        #print ("incremented hex",incr_hex)
                        new_bytes = "0" + str(incr_hex[:1]) + ":" + str(incr_hex[1:])
        elif (old_bytes[0] == "00" and old_bytes[1] == "FF"):
                old_hex = old_bytes[1]
                #print ("old hex:",old_hex)
                incr_hex = hex(int(str(int(old_hex, base=16) + incr)))[2:]
                #print ("incremented hex:",incr_hex)
                new_bytes = "01" + ":" + str(incr_hex[1:])
        elif (old_bytes[0] == "00" and old_bytes[1][:1] == "0") and old_bytes[1][1:] != "F":
                old_hex = old_bytes[1]
                #print ("old hex:",old_hex)
                incr_hex = hex(int(str(int(old_hex, base=16) + incr)))[2:]
                #print ("incremented hex:",incr_hex)
                new_bytes = old_bytes[0] + ":0" + str(incr_hex)
        elif (old_bytes[0] == "00" and old_bytes[1] != "FF"):
                old_hex = old_bytes[1]
                #print ("old hex:",old_hex)
                incr_hex = hex(int(str(int(old_hex, base=16) + incr)))[2:]
                #print ("incremented hex:",incr_hex)
                new_bytes = old_bytes[0] + ":" + str(incr_hex)[:2]
        print ("mac after:", mac[:12] + new_bytes.upper())

您可能可以尝试以下方法:

从mac地址中删除“:” 将mac地址转换为整数 递增整数值 将整数转换为十六进制字符串 在适当的位置插回“:” 为简单起见,我使用的示例代码将递增1。您可能需要修改它以处理拐角情况

s = 'AA:BB:CC:DD:EE:FF'
s = s.replace(':', '')
val = int(s, 16)
val = val + 1
incr_s = hex(val)
incr_s = incr_s[2:].upper()
incr_s = ':'.join(incr_s[i:i+2] for i in range(0, len(incr_s), 2))
print(s)
print(incr_s)
输出:

AABBCCDDEEFF
AA:BB:CC:DD:EF:00

你能解释一下这段代码在没有任何不常见的首字母缩略词的情况下要做什么吗?这段代码要提取bd addr的最后2个字节,并按任何预选值(如1、2或3)递增。并生成一个新的增量bd addr。