我已经编写了一个小的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不是我最强的领域。 我将非常感谢您提供的任何帮助。
答案 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