Нужен исходник

Нужен исходник кода на делфи или паскале перевода из десятичной в двоичную систему счисления и обратно.
Форум Глазовских локальных домашних сетей
http://cabinet-catering.newit-lan.ru/
http://cabinet-catering.newit-lan.ru/viewtopic.php?f=1&t=2481
proxx пишет:Нужен исходник кода на делфи или паскале перевода из десятичной в двоичную систему счисления и обратно.
function IntToHex(Value: Integer; Digits: Integer): string;
// FmtStr(Result, '%.*x', [Digits, Value]);
asm
CMP EDX, 32 // Digits < buffer length?
JBE @A1
XOR EDX, EDX
@A1: PUSH ESI
MOV ESI, ESP
SUB ESP, 32
PUSH ECX // result ptr
MOV ECX, 16 // base 16 EDX = Digits = field width
CALL CvtInt
MOV EDX, ESI
POP EAX // result ptr
CALL System.@LStrFromPCharLen
ADD ESP, 32
POP ESI
end;
function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer; assembler;
begin
asm
PUSH ESI
PUSH EDI
PUSH EBX
MOV ESI,EAX
MOV EDI,EDX
MOV EBX,EDX
MOV EDX,0
JMP @@1
@@0: DB 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1
DB -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
DB -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
DB -1,10,11,12,13,14,15
@@1: LODSW
CMP AL,'0'
JB @@2
CMP AL,'f'
JA @@2
MOV DL,AL
MOV AL,@@0.Byte[EDX-'0']
CMP AL,-1
JE @@2
SHL AL,4
CMP AH,'0'
JB @@2
CMP AH,'f'
JA @@2
MOV DL,AH
MOV AH,@@0.Byte[EDX-'0']
CMP AH,-1
JE @@2
OR AL,AH
STOSB
DEC ECX
JNE @@1
@@2: MOV EAX,EDI
SUB EAX,EBX
POP EBX
POP EDI
POP ESI
end;
end;
// FAQ
// Q: что такое shl?
// A: побитовый сдвиг влево
// A=00000010 в 2-ой системе
// A shl 1 = 00000100
// Q: что такое and?
// A: побитовое И
// A=00001101 в 2-ой системе
// A and 00001010 = 00001000
function IntToBin(Value:Cardinal):string;
var
i:integer;
a:Cardinal;
S:string;
begin
a:=1;
S:='';
for i:=0 to 31 do
begin
if (Value and a)<>0 then
begin
S:='1'+S;
end
else
begin
S:='0'+S;
end;
a:=a shl 1;
end;
Result:=S;
end;
//FAQ
// Q:что такое or?
// A: побитовое ИЛИ
// A=00000001 в 2-ой системе
// A or 00010000 = 00010001
function BinToInt(Value:string):Cardinal;
var
i:integer;
V:Cardinal;
A:Cardinal;
begin
V:=0;
if Length(Value)>32 then
begin
Value:=Copy(Value,1,32);
end;
for i:=1 to Length(Value) do
begin
if Value[i]='1' then
begin
A:=1 shl (Length(Value)-i);
V:=V or A;
end;
end;
Result:=V;
end;