Вот тоже функции по преобразованиям :
Код:
function Convert_Int10_to_Another(v10 : cardinal; BaseAnother : integer) : string;
//Перевод целого 10-чного числа (v10) в систему счисления
//с основанием (BaseAnother [2..36])
//Функция возвращает представление числа
//в заданной системе счисления
Var
vFrac : integer; //остаток по модулю (основание)
vFracStr : string;//строковое представления остатка
begin
Result:='';
if (BaseAnother>1) and (BaseAnother<=36) then begin
repeat
vFrac:=v10 MOD BaseAnother; //v10 – (v10 div BaseAnother)*BaseAnother
v10:=v10 DIV BaseAnother; //trunc(v10/BaseAnother)
if vFrac>9 then begin
//Это буква латинского алфавита
vFracStr:=CHR(ORD('A')-10+vFrac)
end
else begin
//переводим остаток в строковое представление
STR(vFrac,vFracStr);
end;
Result:=Result+vFracStr;
until v10=0;
//Инвертируем результат
Result:=InversionString(Result);
end;
end;
function Convert_IntAnother_to_10(vAnother : string; BaseAnother : integer) : cardinal;
//Перевод целого числа (vAnother) из системы счисления BaseAnother [2..36]
//в десятичную систему счисления
//Функция возвращает представление числа
//в десятичной системе счисления
var
i : integer;
Res, ValNum : integer;
begin
Result:=0;
if (BaseAnother>1) and (BaseAnother<=36) then begin
vAnother:=Trim(vAnother);
if length(vAnother)>0 then begin
vAnother:=AnsiUpperCase(vAnother);
for i:=1 to length(vAnother) do
begin
//Конвертируем текущий символ в число
VAL(vAnother[i],ValNum,Res);
if Res<>0 then begin
//если это не число - считаем,
//что буква латинского алфавита
//и вычисляем по позиции
ValNum:=10+ORD(vAnother[i])-ORD('A');
end;
//Вычисляем соответствующую степень и суммируем
Result:=Result+sp_XpowerN(BaseAnother,length(vAnother)-i)*ValNum;
end;
end;
end;
end;
function sp_XpowerN(X, N :integer ):cardinal;
//X в степени N
var
i : integer;
begin
Result:=1;
for i:=1 to N do
begin
Result:=Result*X;
end;
end;
function InversionString(Sx : string) : string;
//Инвертировать строку
Var
i : integer;
begin
Result:=Sx;
if Length(Sx)>0 then begin
Result:='';
for i:=Length(Sx) downto 1 do
begin
Result:=Result+Sx[i];
end;
end;
end;