SRL Archive - Research & Development Lounge

Hex Stuff


A G E N T

2008-12-07 15:44:18

Hi,
Made some quick functions, I am certain that the Hex <–> Int ones work fine, not sure if the string ones are accurate. Unfortunately I am handling hex as strings.


program New;
{.include SRL/SRL.scar}

function Reverse(str:string):string;
var
i, l : integer;
begin
l := Length(str);
SetLength(Result, l);
for i := 1 to l do
begin
Result[i] := str[(l+1)-i];
end;
end;

function IntToHex(int:integer):string;
var
remainder, res : integer;
hex, greater : string;
begin
greater := 'ABCDEF';
res := int div 16;
remainder := int mod 16;
if(remainder > 9)then
hex := greater[remainder-9]
else
hex := inttostr(remainder);
if(res = 0)then
begin
Result := reverse(hex);
Exit;
end;
repeat
remainder := res mod 16;
res := res div 16;
if(remainder > 9)then
hex := hex + greater[remainder-9]
else
hex := hex + inttostr(remainder);
if(res = 0)then
begin
Result := reverse(hex);
Exit;
end;
until(res=0);
end;

function HexToInt(hex:string):extended;
var
i, l : integer;
begin
Result := 0;
l := Length(hex);
for i := 1 to l do
begin
Result := Result + (StrToFloat(hex[(l+1)-i]) * (Pow(16, i-1)));
end;
end;

function StrToHex(str:string):String;
var
i : integer;
begin
Result := '';
for i := 1 to length(str) do
begin
Result := Result + inttohex(ord(str[i]));
end;
end;

function HexToStr(hex:string):string;
var
i : integer;
begin
for i := 1 to length(hex) - 1 do
begin
Result := Result + chr(Round(HexToInt(hex[i]+hex[i+1])));
end;
end;

begin
//writeln(inttostr($111));
writeln(IntToHex(188));
writeln(StrToHex('BC'));
writeln(floattostr(hextoint('1128')));
writeln(HexToStr('1128'));
end.

mastaraymond

2008-12-08 09:47:57

I made some of these as well, a while ago:


program New;
var
r,g,b : integer;
function HexToInt(hex : String): Integer;
var
Bla : String;
I,J : Integer;
begin;
Bla := '$' + TrimOthers(Hex);
Result := StrToInt(Bla);
if pos('-',hex) >0 then result :=-result;
end;

function IntToHex(int : integer): string;
var
Hexx : string;
Bla : integer;
begin;
Hexx := '0123456789ABCDEF';
Bla := iAbs(int);
while not (bla div 16 = 0) do
begin;
result := Hexx[bla mod 16 + 1] + result;
bla := bla div 16;
end;
if int < 0 then result := '-$' + Hexx[bla+1] + result
else result := '$' + Hexx[bla+1] + result;
end;

procedure HexToRGB(Hex : string; var R,G,B : integer);
begin;
R := HexToInt(Padz(Copy(Hex,1,2),2));
G := HexToInt(Padz(Copy(Hex,3,2),2));
B := HexToInt(Padz(Copy(Hex,5,2),2));
end;

function Pad(str : String; I : integer): string;
var
J : integer;
begin;
Result := str;
if length(str) <> I then
For J:= Length(Str) to I do
result := Result + '0';
end;

function RGBToHex(R,G,B : integer) : string;
begin;
Result := IntToHex(RGBToColor(StrToInt(Padz(IntToStr(R),2)),StrToInt(Padz(IntToStr(G),2)),StrToInt(Padz(IntToStr(B),2))));
end;

begin
Writeln(RGBToHex(10,11,12));
Writeln('The $ is for scar, not for the hex number itself! - MastaRaymond');
Writeln(IntToHex(-16777215));
Writeln(IntToStr(HexToInt('-$FFFFFF')));
end.

A G E N T

2008-12-08 13:40:39

Ah. Your Hex->Int seems a lot simpler - I didn't know StrToInt handled hex also.