Konwertowanie

0

Jak mozna wykonać operację odwrotną do tej, którą robi funkcja IntToHex ???

0

spróbuj HexToInt

0

Z przykroścuią muszę stwierdzić że nie ma takiej funkcji (HexToInt) :(

0

Tu masz cały moduł (Ctrl+C, Ctrl+V):

unit Sys_konw;

interface

uses SysUtils, Math;

// Bin - Dwójkowy
// Oct - Ósemkowy
// Dec - Dziesiętny
// Hex - Szesnastkowy

function BinNaOct(Bin: String): String;
function BinNaDec(Bin: String): Cardinal;
function BinNaHex(Bin: String): String;

function OctNaBin(Oct: String): String;
function OctNaDec(Oct: String): Cardinal;
function OctNaHex(Oct: String): String;

function DecKonwert(Dec: Cardinal; System: Byte): String;
function DecNaBin(Dec: Cardinal): String;
function DecNaOct(Dec: Cardinal): String;
function DecNaHex(Dec: Cardinal): String;

function HexNaBin(Hex: String): String;
function HexNaOct(Hex: String): String;
function HexNaDec(Hex: String): Cardinal;

implementation

function BinNaOct(Bin: String): String;
var
n: Integer;
S, T: String;
begin
while (Length(Bin) mod 3)0 do
begin
Bin:='0'+Bin;
end;
T:='';
for n:=0 to (Length(Bin) div 3)-1 do
begin
S:=Copy(Bin,1+(n*3),3);
T:=T+IntToStr(BinNaDec(S));
end;
Result:=T;
end;

function BinNaDec(Bin: String): Cardinal;
var
n, Suma: Integer;
begin
Suma:=0;
for n:=1 to Length(Bin) do
begin
if Bin[n]='1' then Suma:=Suma+Round(IntPower(2,Length(Bin)-n));
end;
Result:=Suma;
end;

function BinNaHex(Bin: String): String;
var
n, I: Integer;
S, R, T: String;
begin
while (Length(Bin) mod 4)0 do
begin
Bin:='0'+Bin;
end;
T:='';
for n:=0 to (Length(Bin) div 4)-1 do
begin
S:=Copy(Bin,1+(n*4),4);
I:=BinNaDec(S);
case BinNaDec(S) of
0..9: R:=IntToStr(I);
10..15: R:=Chr(55+I);
end;
T:=T+R;
end;
Result:=T;
end;

function OctNaBin(Oct: String): String;
var
n: Integer;
S, T: String;
begin
S:='';
for n:=1 to Length(Oct) do
begin
T:=DecNaBin(StrToInt(Oct[n]));
while (Length(T) mod 3)0 do
begin
T:='0'+T;
end;
S:=S+T;
end;
while S[1]='0' do
begin
Delete(S,1,1);
end;
Result:=S;
end;

function OctNaDec(Oct: String): Cardinal;
begin
Result:=BinNaDec(OctNaBin(Oct));
end;

function OctNaHex(Oct: String): String;
begin
Result:=BinNaHex(OctNaBin(Oct));
end;

function DecKonwert(Dec: Cardinal; System: Byte): String;
var
R: Byte;
S: String;
begin
S:='';
repeat
R:=Dec mod System;
Dec:=Dec div System;
case R of
0..9: Insert(IntToStr(R),S,0);
10..15: Insert(Chr(55+R),S,0);
end;
until Dec=0;
Result:=S;
end;

function DecNaBin(Dec: Cardinal): String;
begin
Result:=DecKonwert(Dec,2);
end;

function DecNaOct(Dec: Cardinal): String;
begin
Result:=DecKonwert(Dec,8);
end;

function DecNaHex(Dec: Cardinal): String;
begin
Result:=DecKonwert(Dec,16);
end;

function HexNaBin(Hex: String): String;
var
n: Integer;
S, T: String;
begin
S:='';
for n:=1 to Length(Hex) do
begin
case Hex[n] of
'0'..'9': T:=DecNaBin(StrToInt(Hex[n]));
'A'..'F': T:=DecNaBin(Ord(Hex[n])-55);
end;
while (Length(T) mod 4)0 do
begin
T:='0'+T;
end;
S:=S+T;
end;
while S[1]='0' do
begin
Delete(S,1,1);
end;
Result:=S;
end;

function HexNaOct(Hex: String): String;
begin
Result:=BinNaOct(HexNaBin(Hex));
end;

function HexNaDec(Hex: String): Cardinal;
var
T, n, Suma: Integer;
begin
Suma:=0;
for n:=1 to Length(Hex) do
begin
T:=0;
case Hex[n] of
'0'..'9': T:=StrToInt(Hex[n]);
'A'..'F': T:=Ord(Hex[n])-55;
end;
Suma:=Suma+(T*Round(Power(16,Length(Hex)-n)));
end;
Result:=Suma;
end;

end.

Chyba nie muszę tłumaczyć, jak go użyć? (jak chcesz aplikację demontracyjną, powinna być gdzieś w serwisie)

Dodam tu też mały apelik do programistów: nie używajcie w kodzie polskiego. To trochę nieciekawie wygląda w języku, w którym wszystko jest po angielsku (żeby nie powiedzieć, że właściwie JEST angielskim).

0

Ale kombinacje:
Liczba := StrToInt('$'+LiczbaHex);
Np.:
L := 'FF';
ShowMessage(IntToStr(StrToInt('$'+L)));
Powinno pokazać 255

1 użytkowników online, w tym zalogowanych: 0, gości: 1