Exemplo Adaptado de Rotina de Conversao de Hexadecima – Binario – Octal

Salve, salve amigos,

Navegando na internet neste final de semana, localize uma unit contendo alguns códigos interessantes e resolvi realizar algumas alterações no código para que você possa precisar em algum momento converter de Hexadecimal, Binário ou Octal.

Não se esqueçam de deixar seu comentário

————————————————————————————————

Em um formulario, adicione os seguintes componentes:

Um RadioGroup contendo os seguintes itens: Dec, Bin. Oct, Hex

Deixe selecionado a primeira opção. (Dec)

Adicione um componente Edit, e limpe seu caption.

Na seção public, declare as seguintes procedure:

Procedure RotinadeConversao_D; // Converte um numero para decimal
Procedure Rotinadeconversao_B; // Converter de decimal para

*******************************************************************

procedure TForm3.RotinadeConversao_D;
var
i, Bin :Integer;
Calcular :Real;
Inverter :String;

begin

Calcular:=0;
Inverter :=AnsiReverseString(Edit1.text) ;

For i:= 1 to Length(Edit1.text) do begin

{ Convertendo de Binario Para Decimal}

If PosicaoAnterior = 1 Then Begin
Bin := StrToInt(Inverter[i]);
Calcular := Calcular + (Bin * Power(2,i-1)); //Power Eleva Potencia
end
{ Fim da Conversão de Binario Para Decimal}
else

{ Inicio de Octal Para Decimal}
if PosicaoAnterior = 2 Then Begin
Bin:=StrtoInt(Inverter[i]);
Calcular := Calcular + (Bin * Power(8,i-1));
end
{ Fim da Conversão de Octal Para Decimal}
else
{ Convertendo de Hexadecimal Para Decimal}
if PosicaoAnterior = 3 Then Begin
Case Inverter[i]of
‘A’:Bin :=10;
‘B’:Bin :=11;
‘C’:Bin :=12;
‘D’:Bin :=13;
‘E’:Bin :=14;
‘F’:Bin :=15;
else Bin:=StrtoInt(Inverter[i]);
end;
Calcular := Calcular + (Bin * power(16,i-1));
end;
{ Fim da Conversão de Hexadecimal Para Decimal}
end;
Edit1.text:=(FloatToStr(Calcular));
end;

***************************************************

procedure TForm3.Rotinadeconversao_B;
var

Calculo,Conversao,Bin,Resto:Integer;
Aux:String;
Begin
Aux:=”;
if Edit1.Text” Then
Conversao:= Trunc(StrToFloat(Edit1.text))
else
Conversao:=0;
Edit1.text:=”;
{Inicio Conversao para Binario}
if RgTipo.ItemIndex=1 Then Begin
repeat
Bin := Conversao div 2;
Resto := Conversao mod 2;
Aux := Aux + IntToStr(resto);
Conversao:= Bin;
until (conversao <=1); Aux:= Aux + IntToSTR(Bin); Edit1.Text:= AnsiReverseString(Aux); end {Fim da Conversao para Binario} else {Inicio Conversao para Octal} if RgTipo.ItemIndex=2 then Begin Repeat Bin := Conversao div 8; Resto := Conversao mod 8; Conversao:= Bin; Aux := Aux + IntToStr(resto); Until (Conversao 0 then
Aux:= Aux + IntToSTR(Bin);
Edit1.Text:= AnsiReverseString(aux);
end
{Fim da Conversão para Octal}
else Begin
{Inicio da Conversao para Hexadecimal}
Repeat
Bin := Conversao div 16;
Resto := Conversao mod 16;
Conversao:= Bin;
case Resto of
10: Edit1.Text :=Edit1.Text + ‘A’;
11: Edit1.Text :=Edit1.Text + ‘B’;
12: Edit1.Text :=Edit1.Text + ‘C’;
13: Edit1.Text :=Edit1.Text + ‘D’;
14: Edit1.Text :=Edit1.Text + ‘E’;
15: Edit1.Text :=Edit1.Text + ‘F’;
else Edit1.Text :=Edit1.Text+ IntToStr(resto);
end;
until (Conversao 0 then
Edit1.Text:= Edit1.Text + IntToSTR(bin);
Edit1.text:= AnsiReverseString(Edit1.text);
end;
{Fim da Conversao para Hexadecimal}

end;


**************************************************************

No evento OnKeyPress do componente Edit, digite o seguinte código

if not (key in [‘0’..’9′]) then
key:=#0;

*********************************************************************

No evento Onclick do componente RadioGroup, digite o seguinte código:

case(RGTIPO.ItemIndex) of
0: begin
RotinadeConversao_D;
PosicaoAnterior:=0;
end;
1: begin
if (PosicaoAnterior=2)Or (PosicaoAnterior=3) Then Begin
RotinadeConversao_D;
PosicaoAnterior:=1;
Rotinadeconversao_B;
end
else Begin
PosicaoAnterior:=1;
Rotinadeconversao_B;
end;
end;//Fim CAse 1
2: begin
If (PosicaoAnterior=1) or (PosicaoAnterior=3) Then Begin
RotinadeConversao_D;
PosicaoAnterior:=2;
Rotinadeconversao_B;
end else Begin
PosicaoAnterior:=2;
Rotinadeconversao_B;
end;
end;
3: begin
If (PosicaoAnterior=1) or (PosicaoAnterior=2) Then Begin
RotinadeConversao_D;
PosicaoAnterior:=3;
Rotinadeconversao_B;
end else Begin
PosicaoAnterior:=3;
Rotinadeconversao_B;
end;
end;
end;
end;

***********************************************************************

Bom, agora basta compilar e digita por exemplo o valor 100 dentro do edit e selecionar uma das opções do Radiogroup

Um forte abraço

Marcos Antonio

Anúncios

7 respostas em “Exemplo Adaptado de Rotina de Conversao de Hexadecima – Binario – Octal

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s