PHP进制算法、十六进制、N进制、算法原理

原理

  • 字符:0123456789ABCDEF
  • 除16取余数得最低1位,然后把商继续除得第2位,直到商等于0
  • 65036 除 16,余数 12(C),商 4064
  • 4064 除 16,余数 0(0),商 254
  • 254 除 16,余数 14(E),商 15
  • 15 除16,余数 15(F),商 0,结束
  • 得16进制为 FE0C

代码

<?php

function L($str) {
    echo "\n{$str}";
}

/**
 * N 进制算法 编码 十进制转 N进制
 */
function encode($num, $bas = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") {
    $len  = strlen($bas);
    $str  = "";
    do {
        $remainder = $num / $len;  // 商数
        $quotient  = $num % $len;  // 余数
        $char = $bas[intval($quotient)]; // 字符位置
        $str  = $char . $str;
        $num  = $remainder;
    } while($num >= 1);
    return $str;
}

/**
 * N 进制算法 解码 N进制转 十进制
 */
function decode($str, $bas = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") {
	$len = strlen($bas);
    $str = strrev($str);
    $num = 0;
    for ($i = 0; $i < strlen($str); $i++) {
        $pos = strpos($bas, $str[$i]);
        $num = $num + (pow($len, $i) * $pos);
    }
    return $num;
}

$a = 6;
$a += 100000;

L("[数字] " . $a);
L("[结果] " . encode($a));

// $base = "0123456789ABCDEF";
// echo $base[11];

  • 下面是输出
[数字] 100006
[结果] 255Y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值