将 VB6 代码翻译成 PHP - 字节作为参数?
Translating VB6 Code to PHP - byte as parameter?
我正在做一个小项目,我需要将一些 vb6 代码转换为 php。
我处于停滞状态,因为我不确定我应该如何将这组代码转换为 PHP 甚至可能。
这是 vb6 代码
Private Function Ist_Bit_Gesetzt_Integer(ByVal arg As Integer, _
ByVal bitpos As Byte) As Boolean
If bitpos > 16 Or bitpos < 1 Then Exit Function
If bitpos = 16 Then
Ist_Bit_Gesetzt_Integer = arg < 0
Else
Ist_Bit_Gesetzt_Integer = arg And (2 ^ (bitpos - 1))
End If
End Function
这是我翻译的代码
function Ist_Bit_Gesetzt($arg, $pos)
{
if($pos > 16 || $pos < 1)
return false;
if($pos == 16)
{
return (bool)($arg < 0);
}else{
return (bool)($arg && (pow(2 , ($pos - 1))));
}
}
问题是,它没有按预期工作,我认为这是因为在 vb6 中,参数 bitpos 被声明为 Byte。
老实说我也不懂计算arg And (2 ^ (bitpos - 1))
函数名翻译过来就是“Is Bit Set?”,目的是判断$arg
的$pos
位置的位是否被设置。
pos(2, ($pos - 1))
等同于1 << ($pos - 1)
,它创建一个在$pos
位置有1位的数(从右数,从1开始)。然后这将用作位掩码以与 $arg
组合;它的所有位都将被清除,除了与此结果中的 1 位对应的位。
您需要使用 &
运算符来执行此按位屏蔽。 &&
是逻辑运算。
将此结果转换为 bool
returns true
如果数字为非零(这将在设置位时发生),如果为零则 false
(未设置该位时)。
所以将最后一行改为:
return (bool)($arg & (1 << ($pos - 1)));
感谢您的帮助,此代码按预期工作。
function Ist_Bit_Gesetzt($arg, $pos)
{
if($pos > 16 || $pos < 1)
return false;
if($pos == 16)
{
return (bool)($arg < 0);
}else{
return (bool)($arg & (1 << ($pos - 1)));
}
}
我正在做一个小项目,我需要将一些 vb6 代码转换为 php。 我处于停滞状态,因为我不确定我应该如何将这组代码转换为 PHP 甚至可能。
这是 vb6 代码
Private Function Ist_Bit_Gesetzt_Integer(ByVal arg As Integer, _
ByVal bitpos As Byte) As Boolean
If bitpos > 16 Or bitpos < 1 Then Exit Function
If bitpos = 16 Then
Ist_Bit_Gesetzt_Integer = arg < 0
Else
Ist_Bit_Gesetzt_Integer = arg And (2 ^ (bitpos - 1))
End If
End Function
这是我翻译的代码
function Ist_Bit_Gesetzt($arg, $pos)
{
if($pos > 16 || $pos < 1)
return false;
if($pos == 16)
{
return (bool)($arg < 0);
}else{
return (bool)($arg && (pow(2 , ($pos - 1))));
}
}
问题是,它没有按预期工作,我认为这是因为在 vb6 中,参数 bitpos 被声明为 Byte。
老实说我也不懂计算arg And (2 ^ (bitpos - 1))
函数名翻译过来就是“Is Bit Set?”,目的是判断$arg
的$pos
位置的位是否被设置。
pos(2, ($pos - 1))
等同于1 << ($pos - 1)
,它创建一个在$pos
位置有1位的数(从右数,从1开始)。然后这将用作位掩码以与 $arg
组合;它的所有位都将被清除,除了与此结果中的 1 位对应的位。
您需要使用 &
运算符来执行此按位屏蔽。 &&
是逻辑运算。
将此结果转换为 bool
returns true
如果数字为非零(这将在设置位时发生),如果为零则 false
(未设置该位时)。
所以将最后一行改为:
return (bool)($arg & (1 << ($pos - 1)));
感谢您的帮助,此代码按预期工作。
function Ist_Bit_Gesetzt($arg, $pos)
{
if($pos > 16 || $pos < 1)
return false;
if($pos == 16)
{
return (bool)($arg < 0);
}else{
return (bool)($arg & (1 << ($pos - 1)));
}
}