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

时间:2015-11-12 10:34:07

标签: php

我已经编写了一个小的Web应用程序来监控我的更大版本的版本,现在我决定以十六进制标志的形式发送一些信息,如000000000000C19B。 mysql db字段是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似乎在这里是正确的。我得到误报和漏报。 我用Google搜索了一下,但说实话,我并不知道我应该为gfoogle做些什么。 PHP不是我最强的领域。 我将非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:3)

bitwise AND works with integers, you are trying to use it on a string.

Change $sFlags to $sFlags = 0x000000000000C19B; in your test.

UNHEX(flags) when you select them from mysql

相关问题