将 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)));
    }
}