PHP的 与或运算 如果前后全是字符串 则通过asc码进行与或$s1 = '0x13';
$s2 = '0x9c';转化成asc 进行与或 则为
‘0’ ‘x’ ‘1’ ‘3’
00110000 01111000 00110001 00110011
^
00110000 01111000 00111001 01100011
----------------------------------------------------------------
00000000 00000000 00001000 01010000结果是 var_dump(chr(0).chr(0).chr(8).chr(80)) 应该是 string(4)"P" 因为用3个非打印字符
dechex转换是按照从数字字符开始(ASC从48到57才识别 其他的都不识别)到尾部或者非数字字符
所以结果是0
$s2 = '0x9c';转化成asc 进行与或 则为
‘0’ ‘x’ ‘1’ ‘3’
00110000 01111000 00110001 00110011
^
00110000 01111000 00111001 01100011
----------------------------------------------------------------
00000000 00000000 00001000 01010000结果是 var_dump(chr(0).chr(0).chr(8).chr(80)) 应该是 string(4)"P" 因为用3个非打印字符
dechex转换是按照从数字字符开始(ASC从48到57才识别 其他的都不识别)到尾部或者非数字字符
所以结果是0
$s2 = 0x9c;
echo dechex($s1^$s2);
8f
没有问题
$s2 = '0x9c';
是字符串 0x变成字符了$s1 = 0x13;
$s2 = 0x9c;
这两个是16进制数,当然不同了。
$s1 = hexdec('0x13');
$s2 = hexdec('0x9c');
echo dechex($s1^$s2); // 8F$s3 = hexdec('13');
$s4 = hexdec('9c');
echo dechex($s3^$s4); // 8F这样就正常了。