javascript & php 進制轉換

Javascript進制轉換:

http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript


Convert a number to a hexadecimal string with:

hexString = yourNumber.toString(16);

and reverse the process with:

yourNumber = parseInt(hexString, 16);


php進制轉換 (2-62):

http://blog.zoeey.org/2010/06/30/short-url-radix-convert/

/*
 * MoXie ([email protected]) 2010-6-30 17:53:57
 *
 * Copyright © 2008-2010 Zoeey.Org . All rights are reserved.
 * Code license: Apache License  Version 2.0
 * http://www.apache.org/licenses/LICENSE-2.0.txt
 */
error_reporting(E_ALL);

/**
 * 返回一字符串,十進制 number 以 radix 進制的表示。
 * @param dec       需要轉換的數字
 * @param toRadix    輸出進制。當不在轉換範圍內時,此參數會被設定爲 2,以便及時發現。
 * @return    指定輸出進制的數字
 */
function dec2Any($dec, $toRadix) {
    $MIN_RADIX = 2;
    $MAX_RADIX = 62;
    $num62 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    if ($toRadix < $MIN_RADIX || $toRadix > $MAX_RADIX) {
        $toRadix = 2;
    }
    if ($toRadix == 10) {
        return $dec;
    }
    // -Long.MIN_VALUE 轉換爲 2 進制時長度爲65
    $buf = array();
    $charPos = 64;
    $isNegative = $dec < 0; //(bccomp($dec, 0) < 0);
    if (!$isNegative) {
        $dec = -$dec; // bcsub(0, $dec);
    }

    while (bccomp($dec, -$toRadix) <= 0) {
        $buf[$charPos--] = $num62[-bcmod($dec, $toRadix)];
        $dec = bcdiv($dec, $toRadix);
    }
    $buf[$charPos] = $num62[-$dec];
    if ($isNegative) {
        $buf[--$charPos] = '-';
    }
    $_any = '';
    for ($i = $charPos; $i < 65; $i++) {
        $_any .= $buf[$i];
    }
    return $_any;
}

/**
 * 返回一字符串,包含 number 以 10 進制的表示。
 * fromBase 只能在 2 和 62 之間(包括 2 和 62)。
 * @param number    輸入數字
 * @param fromRadix    輸入進制
 * @return  十進制數字
 */
function any2Dec($number, $fromRadix) {
    $num62 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $dec = 0;
    $digitValue = 0;
    $len = strlen($number) - 1;
    for ($t = 0; $t <= $len; $t++) {
        $digitValue = strpos($num62, $number[$t]);
        $dec = bcadd(bcmul($dec, $fromRadix), $digitValue);
    }
    return $dec;
}

$sol = '' . PHP_EOL;
echo dec2Any('56800235583', 62), $sol; // ZZZZZZ
echo any2Dec('ZZZZZZ', 62), $sol; // 56800235583
echo dec2Any('123456', 62), $sol; // w7e
echo any2Dec('w7e', 62), $sol; // 123456

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章