Преобразование двоичного числа в десятичное
Решение 1
/////////////////////////////////////////////////////////////////////////
// преобразование 32-битного base2 в 32-битный base10 //
// максимальное число = 99 999 999, возвращает -1 при большем значении //
/////////////////////////////////////////////////////////////////////////
function Base10(Base2:Integer) : Integer; assembler;
asm
cmp        eax,100000000        // проверка максимального значения
 jb         @1                   // значение в пределах допустимого
 mov        eax,-1               // флаг ошибки
 jmp        @exit                // выход если  -1
@1:push       ebx                  // сохранение  регистров
 push       esi
 xor        esi,esi              // результат =  0
 mov        ebx,10               // вычисление десятичного логарифма
 mov        ecx,8                // преобразование по формуле 10^8-1
@2:mov        edx,0                // удаление разницы
 div        ebx                  // eax -  целочисленное деление на 10, edx - остаток от деления на 10
 add        esi,edx              // результат =  результат + разность[I]
 ror        esi,4                // перемещение разряда
 loop       @2                   // цикл для всех 8 разрядов
 mov        eax,esi              // результат  функции
 pop        esi                  //  восстанавление регистров
 pop        ebx
@exit:end;
Решение 2
function IntToBin(Value: LongInt;Size: Integer): String;
var
i: Integer;
beginResult:='';
 for i:=Size downto 0 do  begin
 if Value and (1 shl  i)<>0 then begin
 Result:=Result+'1';
 end else begin
 Result:=Result+'0';
 end;
 end;
end;function BinToInt(Value: String): LongInt;
var
i,Size: Integer;
beginResult:=0;
 Size:=Length(Value);
 for i:=Size downto 0 do  begin
 if Copy(Value,i,1)='1' then begin
 Result:=Result+(1 shl i);
 end;
 end;
end; 
Решение 3
Следующая функция получает в качестве параметра Base (1..16) любую десятичную величину и возвращает результат в виде строки, содержащей точное значение BaseX. Вы можете использовать данный алгоритм для преобразования арабских чисел в римские (смотри ниже).
function DecToBase( Decimal: LongInt; const Base: Byte): String;
const
Symbols: String[16] = '0123456789ABCDEF';
varscratch: String;
 remainder: Byte;
beginscratch := '';
 repeat
 remainder := Decimal mod Base;
 scratch := Symbols[remainder + 1] +  scratch;
 Decimal := Decimal div Base;
 until ( Decimal = 0 );
 Result := scratch;
end;   Передайте данной функции любую десятичную величину (1...3999), и она возвратит строку, содержащую точное значение в римской транскрипции.
function DecToRoman( Decimal: LongInt ): String;
const
Romans: Array[1..13] of String =
 ( 'I', 'IV',  'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M' );
Arabics: Array[1..13] of Integer =
 ( 1, 4, 5, 9, 10,  40, 50, 90, 100, 400,  500, 900, 1000);
var
i: Integer;
 scratch: String;
beginscratch := '';
 for i := 13 downto 1 do
 while ( Decimal >= Arabics[i] ) do
 begin
 Decimal := Decimal - Arabics[i];
 scratch := scratch + Romans[i];
 end;
 Result := scratch;
end;  	