Transformar ASCII em hexadecimal
25/06/2003
0
Eu preciso da lógica de um conversor para transformar código ASCII em hexadecimal.
Exemplo: ´DELPHI´ para 6A4E3H2I1A2F
Alguém tem?
Muito obrigado
Israel Bispo
Israel Bispo
Posts
25/06/2003
Thaisandrade
function IntToHex(Valor: Int64): string;
var
ValBin, ValStr, ValStrA, Str: string;
Tam, X, Quant: integer;
VetHex: array[0..15] of string;
begin
VetHex[0] := ´0´; //Vetor que guarda os valores hexadecimais
VetHex[1] := ´1´;
VetHex[2] := ´2´;
VetHex[3] := ´3´;
VetHex[4] := ´4´;
VetHex[5] := ´5´;
VetHex[6] := ´6´;
VetHex[7] := ´7´;
VetHex[8] := ´8´;
VetHex[9] := ´9´;
VetHex[10]:= ´A´;
VetHex[11]:= ´B´;
VetHex[12]:= ´C´;
VetHex[13]:= ´D´;
VetHex[14]:= ´E´;
VetHex[15]:= ´F´;
ValBin := IntToBin(Valor); //Converte o valor para um número binário para
ValStr := ´´; // depois ser convertido para hexadecimal
if Frac(Length(ValBin)/4) = 0 then //Verifica em quantos grupos de 4 bites o valor
Quant:= Trunc(Length(ValBin)/4) //binário (ValBin) pode ser dividido
else //Se a divisão por 4 não for inteira
Quant:= Trunc(Length(ValBin)/4)+1; //acresenta-se mais um, por que os grupos são sempre
//de 4 bites. (ou seja 1 é igual a 4);
ValBin:= SubStr(ValBin,Quant*4); //Completa a sequência com ´0´ na frente
//ficando múltiplo de 4
Tam:= Length(ValBin); //Pega o novo tamanho da variável que guarda o número binário
while Tam > 0 do //Pega de 4 em 4 bites e gera uma nova string separada por ´;´;
begin
ValStr:=ValStr+Copy(ValBin,Tam-3,4)+´;´;
Tam:=Tam-4;
end;
Str:=´´;
Result:=´´;
for X:= 1 to Length(ValStr) do //Pega a variável separada por ´;´ e vai buscando e montando
begin //a variável com os valores do vetor hexadecimal
if ValStr[X] <> ´;´ then
Str:=Str+ValStr[X]
else
begin
Result:= Result+VetHex[BinToInt(Str)];
Str:=´´;
end;
end;
for X:= 0 to Length(Result)-1 do //Como o resultado aparece invertido, ele deve ser
begin //reinvertido para ficar certo.
ValStrA:=ValStrA+(Copy(Result,Length(Result)-X,1));
end;
Result:= ValStrA;
end;
function IntToBin(Valor: Int64): string;
var
Val,X: integer;
Bin,BinA: string;
begin
Val:= Valor;
if Val = 0 then
begin
Result:=´0´;
Exit;
end;
while Val >= 1 do
begin
if Val > 1 then
begin
Bin:= Bin+FloatToStr(Val mod 2);
Val:= Val div 2;
end
else
begin
Bin:=Bin+FloatToStr(Val);
Break;
end;
end;
for X:= 0 to Length(Bin)-1 do //Inverte a string Bin para ficar binário
begin
BinA:=BinA+(Copy(Bin,Length(Bin)-X,1));
end;
Result:= BinA;
end;
Espero ter ajudado, me fale se funcionar.
25/06/2003
Roger_malk
Pegue o codigo (numero) ASCII da letra:
Divida por 16 --> o resultado eh o primeiro caractere
O resto eh o segundo caractere.
Todos os dois numeros (resultado e resto) serao menor q 16.
Crie um array of char:[0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F] para atribuir os numeros corretamente.
Desculpa, mais acabei de chegar no delphi e sempre funcionou comigo no pascal, por isso nao conheco metodo melhor.
25/06/2003
Carnette
{ Public declarations }
function VIntToHex(Texto: String): string;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.VIntToHex(Texto: String): string;
var
Tamanho,i : integer;
PalavraHex : String;
begin
Tamanho := Length(Texto);
for i := 1 to Tamanho do begin
PalavraHex:= PalavraHex + IntToHex(Ord(Texto[i]),1);
end;
Result := PalavraHex;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := VIntToHex(Edit1.Text);
end;
26/06/2003
Israel Bispo
*** MUITO OBRIGADO ***
Resolveu meu problemão manero!!!
Abraços a todos
PS: Thais, eu ainda não pude testar sua função, mas vou guardá-la para futura consulta (VALEU MESMO)
Israel Bispo
:D :D :D :D :D :D :D :D :D
Clique aqui para fazer login e interagir na Comunidade :)