python - 在 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())
解决方案
您可能可以尝试这样的事情:
- 从 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
推荐阅读
- sql-server - 具有列名的多列的 MAX
- sql - 如何在 SQL Server 中获取累积总和(Z=Z+A+BC)
- r - 使用 R 从谷歌驱动器下载 csv
- google-cloud-platform - 大三角帆 | webhook 作为舞台
- kubernetes - Kubernetes - 部署/副本集
- c++ - 错误:重新定义 'get_pointer'T* get_pointer(T* p) c++11
- python - 我在 python 上打开日志文件时丢失了数据
- flutter - 带有颤振的 SocketIO
- c - c中的二维结构数组
- java - 如何从 Generic 类型创建父类的实例,然后使用它来调用子类方法?