php 数组异或运算
迷茫
迷茫 2017-04-11 09:07:41
[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;

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(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对应的是控制字符,属于不可显示字符,所以显示为空。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号