Показать сообщение отдельно
  #10 (permalink)  
Старый 14.02.2012, 09:41
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 181

вот из любой системы счисления в любую другую, даже вымышленную
num - само число
fromNum - в виде строки передаешь набор символов исходной системы счисления (к примеру для десятичной это будет "0123456789", для двоичной "01", для восьмеричной "01234567", а вымышленная может быть хоть "м84;354,9е75478" - из этих же символов и должно состоять тогда твое число)
toNum - набор символов конечного результата
Единственное, что надо позаботиться в этой функции о спецсимволах, а то мне было влом...
Если набор символов fromNum не совпадает с исходным числом, вернет пустышку.
function NumConvert (num, fromNum, toNum) {
NUM = num.split("");
i = 0;
while (NUM[i]) {
	regexp = new RegExp (NUM[i]);
	if (!regexp.exec(fromNum)) {
		rslt = "";
		return rslt;
		}
	i++;
	}
fromNum = fromNum.split("");
fN = fromNum.length;
toNum = toNum.split("");
tN = toNum.length;
arr = new Object();
i = 0;
while (fromNum[i]) {
	arr[(fromNum[i])] = i;
	i++;
	}
newNum = 0;
i = NUM.length - 1;
while (i >= 0) {
	newNum += arr[String(NUM[i])] * Math.pow(fN, NUM.length - i - 1);
	i--;
	}
i = 1;
while (Math.pow(tN, i) <= newNum) {
	i++;
	}
rslt = '';
while (i > 0) {
	symb = (String(newNum / Math.pow(tN, i - 1))).match(/^\d+/);
	rslt += String(toNum[symb]);
	newNum -= Number(symb) * Math.pow(tN, (i - 1));
	i--;
	}
return rslt;
}
Ответить с цитированием