首页 > 解决方案 > 在 python 中增加 bd_address 是否有更短的方法?

问题描述

我编写了一个 python 函数来将 BT 设备 BD_ADDR 增加任何值,但我的函数只能工作到 xx:xx:xx:xx:FE:FF。例如,原始 BD_ADDR = AA:BB:CC:DD:EE:FF --> 增加 1 BD_ADDR = AA:BB:CC:DD:EF:00。还有没有所有 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())

标签: pythonpython-3.x

解决方案


您可能可以尝试这样的事情:

  1. 从 mac 地址中删除 ':'
  2. 将mac地址转换为整数
  3. 增加整数值
  4. 将整数转换为十六进制字符串
  5. 在适当的位置插入':'

对我有用的示例代码(为简单起见,我将递增 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

推荐阅读