Как преобразовать base64 в base10 в PHP?

В настоящее время я конвертирую base10 в base64 в PHP. но я не знаю, как преобразовать base64 в base10 в php!

Как мне это сделать?

мой алгоритм для преобразования 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); } 

Вот как это сделать 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')); 

Вот PHP-версия Javascript в ответе Стива:

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

Обратите внимание, что алфавит отличается от вашего. Алфавит основывался на ответе здесь: Base10 – base64 url ​​сокращение

Если вы пытаетесь написать PHP-код для базового преобразования с использованием числовых литералов, это может быть невозможно.

PHP, похоже, не имеет дело с шестнадцатеричным литералом (или восьмеричным в этом отношении). По-видимому, когда анализируется шестнадцатеричный, PHP внутренне преобразует шестнадцатеричное значение в десятичное значение перед использованием!

Вот несколько сценариев, демонстрирующих это. (Проверьте PHP: Целые числа – руководство, чтобы увидеть обозначения, используемые PHP для числовых литералов.)

Вторя

Числовые литералы разрешаются до их десятичных эквивалентов до вывода.

 // code output echo 26; // 26 echo 0x1A; // 26 

Базовое преобразование

Использование PHP-функции base_convert() лучше демонстрирует, как PHP интерпретирует hex до десятичного числа до использования. (Проверьте PHP: base_convert – Руководство .)

При стандартном использовании мы преобразуем шестнадцатеричный 0x1A в десятичный и наоборот.

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

Теперь для нестандартного использования decimal to hex работает отлично, но не наоборот.

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

По-видимому, шестнадцатеричный 0x1A внутренне преобразован в десятичный номер 26 перед использованием. Это может быть продемонстрировано путем преобразования шестнадцатеричного значения '26' в десятичное.

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