Hola a todos, no había podido dar repuesta por tanto trabajo, pero les cuento:
un hexadecimal EBD0A0A2B9E5443387C068B6B72699C7 lo convierto a decimal 313451834834061278758346828331453159879 así
Código Delphi
[-]
Function HexToBCD(s : string) : TBcd;
var
bb : Byte;
cc : Char;
begin
Result := 0;
s := UpperCase(s);
for bb := 1 to Length(s) do
begin
Result := Result * 16;
cc := s[bb];
case cc of
'0'..'9': Result:= Result + ord(cc) - ord('0');
'A'..'F': Result:= Result + ord(cc) - ord('A')+10;
else raise EConvertError.Create('Se ha encontrado un caráctar no valido.');
end;
end;
end;
y desde el hexadecimal lo paso a binario 1110101111010000101000001010001010111001111001010100010000110011100001111100000001101000101101101011 0111001001101001100111000111 así
Código Delphi
[-]
Function HexToBin(Hexadecimal:string):string;
const
BCD: array [0..15] of string=
('0000','0001','0010','0011','0100','0101','0110','0111',
'1000','1001','1010','1011','1100','1101','1110','1111');
var
i:integer;
begin
for i:=Length(Hexadecimal) downto 1 do
Result:=BCD[StrToInt('$'+Hexadecimal[i])]+Result;
end;
desde el binario lo puedo pasar al hexadecimal así
Código Delphi
[-]
function BinToHex(Binario:string):string;
const
BCD: array [0..15] of string=
('0000','0001','0010','0011','0100','0101','0110','0111',
'1000','1001','1010','1011','1100','1101','1110','1111');
HEX: array [0..15] of char=
('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
var
i,n:integer;
sTemp:string;
sNibble:string;
begin
Result:='';
sTemp:=Binario+Copy('000',1,Length(Binario) mod 4);
for i:=0 to (Length(Binario) shr 2)-1 do
begin
sNibble:=Copy(sTemp,(i shl 2)+1,4);
n:=8;
while (sNibble <> BCD[n]) do
if sNibble < BCD[n] then Dec(n) else Inc(n);
Result:=Result+HEX[n];
end;
end;
El gran problema es que desde el décimal no he podido pasarlo a hexadecimal, alguna idea?