php 数组异或运算

需要用php处理一串16进制的字符串做异或运算,赋值到数组后计算得到的是空。如果直接复制变量计算的后就能得到正常结果,求解
<?php

$xoc = 12345678; 
$a = str_split($xoc, 2);    
$i =$a[0] ;
$b = $a[1];
$c = $i ^ $b;
echo $c;

?>
返回空
如果直接用
<?php

$a = 12;
$b = 34
echo $c = $a ^ $b;

?>
这样就可以得到正确的结果。

阅读 5.2k
3 个回答

str_split后$i成字符串了$c = (int)$i ^ (int)$b;

错误原因 没有做类型转换

$xoc = 12345678;
$a = str_split($xoc, 2);//$a的类型是字符串数组,要把里面的字符串转换成整数再做运算
$i = (int)$a[0] ;
$b = (int)$a[1];
$c = $i ^ $b;
echo $c;

$i =$a[0] ;
var_dump($i);
// 输出:string '12' (length=2)
$b = $a[1];
var_dump($b);
// 输出:string '34' (length=2)

字符串'12'和'34'异或是按位进行的,就是'1'^'3'、'2'^'4'
'1'^'3'=49(ASCII码)^51(ASCII码)=0011 0001^0011 0011=0000 0010=2(ASCII码)=STX (start of text)
'2'^'4'=50(ASCII码)^52(ASCII码)=0011 0010^0011 0100=0000 0110=6(ASCII码)=Acknowledge (确认)
ASCII码0~31对应的是控制字符,属于不可显示字符,所以显示为空。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题