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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar