1

現在、PHP で base10 の数値を base64 に変換しています。しかし、PHPでbase64をbase10に変換する考えはありません!

どうすればいいですか?

base10をbase64に変換するための私のアルゴリズム:

$rep = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','-','_');
$new = "";
while ($num>0) {
    $r = $num % 64;
    $new .= $rep[$r];
    $num = floor($num/64);
}
4

3 に答える 3

4

これを行うJavascriptの方法を次に示します。おそらく、php 用にコーディングできます。

var ALPHABET = {'-': 62, '1': 53, '0': 52, '3': 55, '2': 54, '5': 57, '4': 56, '7': 59, '6': 58, '9': 61, '8': 60, 'A': 0, 'C': 2, 'B': 1, 'E': 4, 'D': 3, 'G': 6, 'F': 5, 'I': 8, 'H': 7, 'K': 10, 'J': 9, 'M': 12, 'L': 11, 'O': 14, 'N': 13, 'Q': 16, 'P': 15, 'S': 18, 'R': 17, 'U': 20, 'T': 19, 'W': 22, 'V': 21, 'Y': 24, 'X': 23, 'Z': 25, '_': 63, 'a': 26, 'c': 28, 'b': 27, 'e': 30, 'd': 29, 'g': 32, 'f': 31, 'i': 34, 'h': 33, 'k': 36, 'j': 35, 'm': 38, 'l': 37, 'o': 40, 'n': 39, 'q': 42, 'p': 41, 's': 44, 'r': 43, 'u': 46, 't': 45, 'w': 48, 'v': 47, 'y': 50, 'x': 49, 'z': 51};

function decode(s) {
    var n = 0;
    for(var i=0; i < s.length; i++) {
        var c = s.charAt(i);
        n = n * 64 + ALPHABET[c];
    }
    return n;
}

console.log(decode('EqfyK'));
于 2012-06-08T19:19:19.907 に答える
2

スティーブの回答にあるJavascriptのPHPバージョンは次のとおりです。

function lengthen($id) {
    $alphabet='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-';

    $number=0;
    foreach(str_split($id) as $letter) {
        $number=($number*64) + strpos($alphabet,$letter);
    }
    return $number;
}

アルファベットが違うので注意。アルファベットは、次の回答に基づいています: Base10 to base64 url​​ shorting

于 2015-08-15T01:02:21.103 に答える
0

数値リテラルを使用して基数変換用の PHP コードを記述しようとしている場合、それは不可能な場合があります。

PHP は実際には 16 進リテラル (または 8 進) を扱っていないようです。どうやら、16 進数が解析されると、PHP は内部で 16 進数を使用する前に 10 進数に変換します!

これを示すいくつかのシナリオを次に示します。( PHP: Integers - Manualを参照して、PHP で数値リテラルに使用される表記法を確認してください。)

反響する

数値リテラルは、出力前に同等の 10 進数に解決されます。

// code       output

echo 26;      // 26
echo 0x1A;    // 26

塩基変換

PHP の関数を使用base_convert()すると、使用前に PHP が 16 進数を 10 進数に変換する方法がよくわかります。( PHP: base_convert - Manualを確認してください。)

標準的な使用法では、16 進数の 0x1A を 10 進数に、またはその逆に変換します。

echo base_convert('0x1A', 16, 10);       // 26
echo base_convert('26', 16, 10);         // 1a

現在、非標準の使用法では、10 進数から 16 進数への変換は正常に機能しますが、その逆は機能しません。

echo base_convert(0x1A, 16, 10);         // 38
echo base_convert(26, 10, 16);           // 1a

どうやら、16 進数は使用前に0x1A内部で 10 進数に変換されます。26これは、16 進数を 10 進数に変換することによって実証できます'26'

echo base_convert(0x1A, 16, 10);         // 38
echo base_convert(26, 16, 10);           // 38
于 2012-07-17T03:25:44.737 に答える