-pB_No- [mailto:cherem@wp.pl] w dniu 23.2.2002 15:38 napisal:
Kowertowanie z liczby (integer) na liczbe przedstawiana w ukladzie szesnastkowym (hexadecymalnym) odbywa sie za pomoca HEXTOINT(intereger).
>Pewien koles na czacie www.community.borland.com
>zapytal tamtejszych programistow o konwertowanie w odwrotna strone.
>Odpowiedz brzmiala: HexToBin. Podziekowal i wyszedl, a koles, ktory mu odpowiedzial, zbluzgal go za to, ze nie potrafi korzystac z Pomocy Delphi. Ja mu na to, zeby mi wyslal zpolszczona wersje 8>>. Nic nie odpowiedzial.
>
>Kiedy sprawdzalem te jego konwersje, napotkalem pewien problem. Otoz jezeli ostatni parametr tej funkcji, nie jest zerem, to wszystko sie ladnie kompiluje, ale jak wciskam Baton (8>), znaczy Button, to wlazi blad. Jezeli natomiast ostatni parametr funkcji HexToBin wynosi zero, to po przekonwertowaniu liczby, ta liczba wynosi zero.
>Poza tym, bin to binary, a koles chcial int czyli integer.
>
>
>> Ja znalazlem kiedys taka funkcje na pewnej stronie (adresu nie pamietam)
Jak wykonać konwersję z systemu dziesiętnego na binarny lub szesnastkowy i na odwrót?
Można użyć do tego celu funkcji napisanych przez Milosza Krajewskiego:
function Chr2Int(c: Char): Integer;
begin
c := UpCase(c);
if (c >= '0') and (c <= '9') then Result := Integer(c) - Integer('0')
else Result := Integer(c) - Integer('A') + 10;
end;
function Int2Chr(i: Integer): Char;
begin
if i < 10 then Result := Char(i + Integer('0')) else
Result := Char(i - 10 + Integer('A'));
end;
function Str2Int(s: String; base: Integer): Integer;
var
i: Integer;
begin
Result := 0;
for i := 1 to Length(s) do Result := (Result * base) + Chr2Int(s[i]);
end;
function Int2Str(v: Integer; base: Integer): String;
var
m: Integer;
begin
Result := ; while v <> 0 do begin m := v mod base; v := v div base; Result := Int2Chr(m) + Result; end; if Result =
then Result := '0';
end;
Przykład użycia:
labelHex := Int2Str(157, 16);
labelBin := Int2Str(157, 2);
labelOct := Int2Str(157, 8);
label19 := Int2Str(157, 19); * to bedzie w 19-stkowym
ValueHex := Str2Int('110101010', 2);
ValueBin := Str2Int('AF16', 16);
ValueOct := Str2Int('740', 8);
Value7 := Str2Int('666', 7); * z systemu 7-kowego
labelBin := Int2Str(Str2Int(labelHex, 16), 2); // 16 -> 2
Dziala! Sprawdzilem.
PC