Цитата мудреца

Голосование

Система Orphus. Если вы заметили ошибку на сайте, нажмите сюда.
Загружается, подождите...
Начало сайта Материалы сайта Программы Перевод в разные системы счисления
Версия для слабовидящих

Перевод в разные системы счисления

Часто бывает нужно перевести число из одной системы счисления в другую. Для реализации этой задачи была написана функция на PHP. Посмотреть код класса PHP и проверить работу этой функции можно на странице "Перевод в разные системы счисления". Если же Вам просто нужно перевести одно число в другую систему счисления, то это можно сделать там же.

Как известно, самая популярная система счисления, которой мы пользуемся, — десятичная. Но те, кто связан с компьютерами, знают, что есть ещё несколько систем. Та, которой записана информация в компьютере, называется двоичная, т.к. использует лишь две цифры: "0" и "1". Для удобства чтения двоичной информации были придуманы восьмеричная и шестнадцатеричная системы. Цифры в таких системах использовались от "0" до "7" и от "0" до "f" соответственно. Т.е. за неимением специальных цифр, после девятки начинали использовать буквы.

Здесь предлагается возможность перевода из любой системы счисления в любую от двоичной до 128-ричной. В последней после цифр используются буквы: сначала строчные латинские, затем заглавные латинские, а потом то же с кириллицей. Всего получается 128 символов. Переводить можно числа с любым количеством знаков. Но здесь мы ограничимся 128-разрядными числами.

Основание источника Источник Основание результата

Предлагаю также класс PHP, который решает эту задачу.

Код: Выделить всё
/* *----------------------------------------------------------------- * Класс занимается переводом из одной системы счисления в другую. * Класс содержит различные наборы символов для перевода. * Можно использовать имеющиеся, а можно создавать свои. *----------------------------------------------------------------- */ class Renumeric { //Полный вариант набора цифр var $NumSet =''; //Входящий и исходящий набор цифр var $InputSet =''; var $OutputSet =''; //Буфер временного хранения. Содержит массив целых чисел. var $Buffer =array(); //Максимальное число в элементе буфера (основание вывода) var $MaxBufElement =10; //Код ошибки /* *------------------------------- * 0 - нет ошибки * 1 - символа нет в наборе * 2 - символов в наборе больше 1 *------------------------------- */ var $Error =0; /*** Конструктор ***/ function Renumeric(){ $this->NumSet= '0123456789'. //10 'abcdef'. //16 'ghijklmnopqrstuvwxyz'. //36 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. //62 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; //128 $this->InputSet =substr($this->NumSet, 0, 16); $this->OutputSet =substr($this->NumSet, 0, 10); $this->MaxBufElement=10; } /*** Устанавливает входящий и исходящих набор и оставляет его, пока существует класс ***/ function Preset($InSet, $OutSet){ $this->InputSet=$InSet; $this->OutputSet=$OutSet; $this->MaxBufElement=strlen($OutSet); } function ADD($n){ $pos=0; $buf=$n; do{ if(isset($this->Buffer[$pos])){ $buf+=$this->Buffer[$pos]; } $this->Buffer[$pos]=$buf % $this->MaxBufElement; $buf=intval($buf / $this->MaxBufElement); $pos++; }while ($buf>0); } function MUL($n){ $tmp_buf=array(); $res_len=count($this->Buffer); if ($res_len==0){ return; } $cur_pos=0; $buf=0; do{ $a=0; if ($cur_pos<$res_len){ $a=$this->Buffer[$cur_pos]*$n; } $a+=$buf; $tmp_buf[$cur_pos]=$a % $this->MaxBufElement; $buf=intval($a / $this->MaxBufElement); $cur_pos++; } while(($res_len>$cur_pos)||($buf!=0)); $this->Buffer=$tmp_buf; } /*** Переводит из одной системы в другую ***/ function Go($input, $inset=0, $outset=0){ $result=true; /*** Временное сохранение глобальных наборов ***/ if ($inset!=0 && $outset!=0){ $tmp_in=$this->InputSet; $tmp_out=$this->OutputSet; $this->InputSet=substr($this->NumSet, 0, $inset); $this->OutputSet=substr($this->NumSet, 0, $outset); $this->MaxBufElement=$outset; } /*** Чтение входящего числа ***/ $this->Buffer=array(); $base_in=strlen($this->InputSet); $count_in=strlen($input); for ($i=0; $i<$count_in; $i++){ $a=$input[$i]; $present=substr_count($this->InputSet, $a); if($present==0){ $result=false; $this->Error=1; break; } if($present>1){ $result=false; $this->Error=2; break; } if ($i!=0){ $this->MUL($base_in); } $this->ADD(strpos($this->InputSet, $a)); } if ($result){ $result=''; $count_out=count($this->Buffer); for ($i=0; $i<$count_out; $i++){ $result=$this->OutputSet[$this->Buffer[$i]].$result; } } /*** Восстановление прежних наборов ***/ if (isset($tmp_in)){ $this->InputSet=$tmp_in; $this->OutputSet=$tmp_out; $this->MaxBufElement=strlen($tmp_out); } return $result; } }


Кто сейчас на сайте

Зарегистрированные пользователи: Bing [Bot]