我有一些python代码,我想在100%php代码中使用。你有什么想法,我可以如何转换代码?我在转换代码时遇到了问题,特别是部分获取位和设置位。在php中转换python代码的最佳方法用于SNMP VLAN掩码的位掩码计算
通过snmp从交换机读取位掩码,并且掩码表示巫婆端口在定义的vlan中。例如:
snmpget 1.3.6.1.2.1.17.7.1.4.3.1.2。返回一个HEX字符串,如F100000000000000
每十六进制数字代表交换机的4个物理LAN端口。这个例子中的第一个数字是F,意思是二进制1111.这意味着1-4中的每个端口都在vlan中。
如果只想端口1,2和4面膜会1101是十六进制D.
代码的目的是我想知道的,例如,如果端口15是在VLAN或不(getbitatposition),如果不是,我可以改变端口位置的掩码(setbitatposition)。
端口15例如是在炭4左起:
F =端口1-4
1 =端口5-8
0 =端口9-12
0 =端口13-16 =>十六进制0 =>二进制0000
要获得vlan中的端口15,我必须将第三位从0000更改为0010,并将其转换回十六进制=> 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
这是我第一次尝试,但结果是不一样的:
private function _convertHexCharacterToInt($char){
if (strtoupper($char) == "A"){
return 10;}
elseif (strtoupper($char) == "B"){
return 11;}
elseif (strtoupper($char) == "C"){
return 12;}
elseif (strtoupper($char) == "D"){
return 13;}
elseif (strtoupper($char) == "E"){
return 14;}
elseif(strtoupper($char) == "F"){
return 15;}
else {
return $char;
}
}
private function _getBitAtPosition($pos,$bitmap){
foreach(range(0,strlen($bitmap)) as $x){
$mask=0x8;
foreach(range(0,3) as $y){
if((($x * 4) + $y + 1) == $pos){
if($this->_convertHexCharacterToInt(substr($bitmap,$x,1))&$mask != 0{
return $this->_convertHexCharacterToInt(substr($bitmap,$x,1))&$mask;
}
$mask = $mask >> 1
}
}
}
}
起初:你重新发明了车轮。 Python('hex(x)','int(x,16)')和PHP('hexdec(x)','dechex(x)')都具有内置函数来执行int - hex转换。另外,对于你期望其他两个功能所做的描述也是有帮助的。什么是位图(类型,示例数据)? – 2015-02-23 10:03:05
你是对的我已经改造了车轮。:-) – max 2015-02-23 10:34:07
我已经找到了自己的解决方案后,一些问题转换不是我最喜欢的爱好... – max 2015-02-23 19:47:19