Transformar ASCII em hexadecimal

25/06/2003

0

Olá amigos,

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

Israel Bispo

Responder

Posts

25/06/2003

Thaisandrade

ibispo, fiz essa função a algum tempo e não me lembro de tem algum bug. Vai junto uma outra auxiliar.

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.


Responder

25/06/2003

Roger_malk

O método q conheco eh letra a letra:

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.


Responder

25/06/2003

Carnette

public
{ 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;


Responder

26/06/2003

Israel Bispo

Olá amigos,

*** 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


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar