本文共 1921 字,大约阅读时间需要 6 分钟。
我有一些python代码,我想在一个100%的php代码中使用。你知道我怎么转换代码吗???我在转换代码时遇到问题,尤其是部分get bit和set bit。在
位掩码通过snmp从交换机中读取,掩码表示交换机端口位于定义的vlan中。示例:
snmpget 1.3.6.1.2.1.17.7.1.4.3.1.2。返回一个十六进制字符串,如F100000000000000
每个十六进制数字表示交换机的4个物理LAN端口。本例中的第一个数字是F,表示二进制1111。这意味着1-4的每个端口都在vlan中。在
如果只需要端口1、2和4,掩码将是1101,并且是十六进制D
代码的目标是我想知道例如端口15是否在vlan中(getbitatposition),如果不是,我可以更改端口位置的位掩码(setBitaPosition)。在
例如,端口15位于从左起的char 4中:
F=端口1-4
1=端口5-8
端口=0-9
0=端口13-16=>;十六进制0=>;二进制0000
要获得vlan中的端口15,我必须将第3位从0000更改为0010,并将其转换回hex=>;2。在
例如,新掩码将为F102000000000000
python代码:def convertHexCharacterToInt(char):
if (char.upper() == "A"):
return 10
elif (char.upper() == "B"):
return 11
elif (char.upper() == "C"):
return 12
elif (char.upper() == "D"):
return 13
elif (char.upper() == "E"):
return 14
elif (char.upper() == "F"):
return 15
else:
return (int(char))
def convertIntToHexCharacter(integer):
if (integer < 0 or integer > 15):
return "-1"
if (integer < 10):
return str(integer)
elif (integer == 10):
return "A"
elif (integer == 11):
return "B"
elif (integer == 12):
return "C"
elif (integer == 13):
return "D"
elif (integer == 14):
return "E"
elif (integer == 15):
return "F"
def __getBitAtPosition(position, bitmap):
for x in range(0, len(bitmap)):
mask = 0x8
for y in range(0, 4):
if (((x * 4) + y + 1) == position):
return (convertHexCharacterToInt(bitmap[x]) & mask) != 0
mask = mask >> 1
return None
def __setBitAtPosition(position, bitmap, value):
if (__getBitAtPosition(position, bitmap) == value):
return bitmap
charPosition = (position + 3) / 4 - 1
bitPosition = int(math.fabs((position - (charPosition * 4)) - 4))
bitValue = 2 ** bitPosition
fourBitValue = convertHexCharacterToInt(bitmap[charPosition])
newValue = None
if (value):
newValue = fourBitValue + bitValue
else:
newValue = fourBitValue - bitValue
newBitmap = bitmap[:charPosition] + convertIntToHexCharacter(newValue) + bitmap[charPosition + 1:]
return newBitmap
这是我第一次尝试,但结果不一样:
^{pr2}$
转载地址:https://blog.csdn.net/weixin_39987847/article/details/115776719 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!