нужно задать функцию перевода в систему счисления со своими символами типа я задаю символы "q 6 f 8" тогда число 3 будет выглядеть как "f" а 4 как "8" типа кудато сюда копать PHP: function gen($a) { $alf = 'A B C D E F G H I K L M N O P Q R S T V X Y Z'; $malf = explode(' ', $alf); $count = count($malf); while(пока не поделим всё число){ $div = $a / $count; $div = substr($div, 0, strrpos($div, ',')); $mod = $a % $count; вышитываем символ... { } echo gen(3255); или может есть другой путь?
Vlad&slav четче сформулируйте задание. О каких числах идет речь? Требуется сделать простую замену всех цифр на некторый набор символов? То есть на входе например "1331" А на выходе будет "acca"? Тогда читайте про функцию strtr: PHP: $val = 1331; echo strtr((str) $val, '0123456789', 'abcdefghij'); // Или если требуется заменять только некоторые символы: echo strtr((str) $val, array('1' => 'a'));
Гифтс, не К примеру, в двоичной системе набор такой: "0 1" В восьмиричной: "0 1 2 3 4 5 6 7" В шестнадцатиричной: "0 1 2 3 4 5 6 7 8 9 A B C D E F" ТСу надо задавать такой набор своими символами и переводить в свою такую систему. Вообще, код там прост, но писать так влом
То как говорит Chaak: PHP: echo base_convert((int) $val, 10, 36); Как говорит wildshaman PHP: function some_trash($val, $from=10 ,$base=-1, $replacement='ABCDEFGHIKLMNOPQRSTVXYZ!"№;%:?*()') { $base = $base <= 0 ? count($replacement) : $base; if (strlen($replacement)<$base) return false; $tr_from = substr('0123456789ABCDEFGHIKLMNOPQRSTVXYZ', 0, $base); return strtr((string) base_convert($val, $from, $base), $tr_from, $replacement); } echo some_trash(50, 10, 16);
Vlad&slav с помощью base_convert переменная преобразуется к нужной системе счисления. Дальше командой strtr символы полученного числа преобразуются соответственно со строкой замены ($replacement). Например $replacement = 'abcdefghijklm' тогда 0 будет заменен на а, 1 на b и так далее
А если я задам ряд символов для создания системы счисления больше чем strlen(0123456789ABCDEFGHIKLMNOPQRSTVXYZ) тогда твой код вроде как работать не будет ? возмождно ли реализовать через while?
Формулирую. Каждая сис.счисления задаётся какимто набором символов(строк), например двоичная 0 и 1 Мне нужна функция для получения n-ного члена системы счисления набор символов которой я задам сам (задам массивом). Функция принимает 2 параметра: n и массив набора символов(строк)(любого количества). Нужная система счисления будет образовываться из элементов массива и основанием = количеству элементов массива. Функция вернёт n-ный член этой системы счисл. PHP: function (array('a', '[g]', '[!]', '5', '}', '+', '[v]', '[ab]'), '10744') { ...... return // функция по идеи должна вернуть [!]}[ab][ab]a } С целью криптографии
Эта задача называется nth permutation и у нее есть стандартное решение. К криптографии это имеет весьма опосредованное отношение.
а в чём проблема? PHP: function dec2hz($Ahz,$Dec){ for($hz=count($Ahz),$i=1;$Dec>=pow($hz,$i);$i++){/*© ROX ®*/} for($i--,$dc=abs($Dec),$ы='';$i>=0;$i--){ $sl=pow($hz,$i); $kk=floor($dc/$sl); $dc-=$kk*$sl; $ы.=$Ahz[$kk]; } return $ы; } echo dec2hz(array('a', '[g]', '[!]', '5', '}', '+', '[v]', '[ab]'),10744); конечно, всё можно сделать куда проще бональным делением... но это слишком просто