如何检查 PHP 中的十六进制标志?

How to check hex flags in PHP?

我已经编写了一个小网络应用程序来监视我的较大版本的版本,现在我决定以十六进制标志的形式发送一些信息,例如 000000000000C19B。 mysql 数据库字段是一个 utf8 (16)varchar。

在 php 脚本中,我有一个从 0x800000 到 0x01 的数组。

$gFlagsLong = array( 0x800000 => "Reserv6", //24
                0x400000 => "Reserve5", //23
                0x200000 => "Flag22",   //22
                0x100000 => "Flag21",   //21
                0x80000 => "Flag20",    //20
                0x40000 => "Flag19",    //19
                0x20000 => "Flag18",    //18
                0x10000 => "Flag17",    //17
                0x8000 => "Flag16",     //16
                0x4000 => "Flag15",     //15
                0x2000 => "Flag14",     //14
                0x1000 => "Flag13",     //13
                0x800 => "Flag12",      //12
                0x400 => "Reserve2",    //11
                0x200 => "Flag10",  //10
                0x100 => "Flag9",       //9
                0x80 => "Reserve1",     //8
                0x40 => "Flag7",        //7
                0x20 => "Flag6",        //6 
                0x10 => "Flag5",        //5
                0x08 => "Flag4",        //4
                0x04 => "Flag3",        //3
                0x02 => "Flag2",        //2
                0x01 => "Flag1" );      //1

我尝试像在 C 中一样,在设置了任何值时检查标志字符串。

                $sFlags ="000000000000C19B";
                $sCheck = "X";
                $sNCheck = " "; // html space char  
                $sTemp = "";
                foreach($gFlagsLong as  $nKey => $sBez){
                    if($sFlags & $nKey) $sTemp = $sCheck;
                    else $sTemp = $sNCheck;
                    echo "<td id='flag' title='" . $sBez . "'>"  . $sTemp . "</td>";
                }

很遗憾,它无法正常工作。该代码有效,但按位 AND 在这里似乎不正确。我得到误报和漏报。 我在谷歌上搜索了一下,但老实说,我不知道我应该 gfoogle 到底是为了什么。 PHP 不是我的强项。 如果您能提供任何帮助,我将不胜感激。

按位 AND 适用于整数,您正在尝试对字符串使用它。

在您的测试中将 $sFlags 更改为 $sFlags = 0x000000000000C19B;

UNHEX(flags) 当你 select 他们来自 mysql