没有用php的位运算,效率会低些,算是完整的反映了转换规则, 基本上就是:格雷码 转成 二进制码 转成 十进制码
十进制码转格雷码
function decimal_to_gray($decimal){
//$decimal = str_split((string)decdecimal($decimal));
//先把十进制整形树字转换成二进制码
$decimal = (string)decbin($decimal);
$len = 4 - strlen($decimal);
if($len > 0){
for($i =0 ;$i< $len; $i++ ){
$decimal = '0'.$decimal;
}
}
$decimal = str_split($decimal);
$gray = '';
foreach($decimal as $k=>$v){
if($k == 0){
$gray .= $v;
}else{
$gray .= $decimal[$k-1] ^ (int)$v;
}
}
return $gray;
}
格雷码转十进制码
function gary_to_decimal($gray){
$gray = str_split((string)$gray);
$decimal = '';
$prev = 0;
foreach($gray as $k=>$v){
if($k == 0){
$decimal .= $prev = $v;
}else{
$decimal .= $prev = (int)$v ^ $prev;
}
}
//将获得的二进制码转换成十进制码
return bindec($decimal);
}