Hexdecimal para Binario

Delphi

12/04/2005

Alguem pode me ajudar, a transformar numeros Hexdecimal
para binario. Eu vi alguma coisa como uma função HexToBin,
mas não consegui executa la. Ex. Tenho no edit1 3FFF resultado
no Edit2 em Binario.

Grato
Juarez


Juarezber

Juarezber

Curtidas 0

Respostas

Khundalini

Khundalini

12/04/2005

Se bem me lembro, HexToBin é uma rotina(procedure, procedimento, etc.), e não uma função! Fica esperto!

HexToBin() e BinToHex() são mencionados no help do Delphi, mas poucas pessoas sabem que essas rotinas estão lá! Mas, como eu costumo dizer, quem procura, acha! HEHE! ;-)

Coloca três labels (Label1, Label2 e Label3) e um botão (Button1) e no código do evento OnClick do botão, usa o seguinte código:

procedure TForm1.Button1Click(Sender: TObject);
var
E: Extended;
Buf: array[0..SizeOf(Extended) * 2] of Char;
begin
E := Pi;
Label1.Caption := Format(´E tem o valor ¬.15f´, [E]);
BinToHex(@E, Buf, SizeOf(E));
Buf[SizeOf(Buf) - 1] := #0;
Label2.Caption := Format(´Como texto, o conteúdo em binário de E é algo como ¬s´, [Buf]);
HexToBin(Buf, @E, SizeOf(Buf) - 1);
Label3.Caption := Format(´Volta de texto pra binário, E is now ¬.15f´, [E]);
end;

[]s
Rubem Rocha
Manaus, AM


GOSTEI 0
Kapak

Kapak

12/04/2005

Se bem me lembro, HexToBin é uma rotina(procedure, procedimento, etc.), e não uma função! Fica esperto!
No Delphi 6, HexToBin é uma função que retorna o número de caracteres colocados no parâmetro Buffer.


GOSTEI 0
Juarezber

Juarezber

12/04/2005

kapak, pode dar um exemplo com dois edits, 1 com Hex outro com
Binario. Ex: 3FFF em Hexadecimal é = Binario 11111111111111,
3FF em Hexadecimal é = Binario 11111111111110, 3FF em Hexadecimal é = Binario 111111111111101. Se mais alguem tambem quiser responder
fico agradecido.

juarezber@terra.com.br


GOSTEI 0
Kapak

Kapak

12/04/2005

Bom, não conheço nenhuma rotina que transforme desse jeito, mas vc pode fazer via código:
var i,j,l:Integer; p:Pchar; b:Byte;
begin
  if Length(Edit1.Text) mod 2 > 0 then
    Edit1.Text := ´0´ + Edit1.Text;
  l := Length(Edit1.Text) div 2;
  p := AllocMem(l);
  HexToBin(PChar(Edit1.Text), p, l);
  for i := 1 to l do
    for j := 7 downto 0 do
    begin
      b := 1 shl j;
      if (Ord((p+i-1)^) and b) > 0 then
        Edit2.Text := Edit2.Text + ´1´
      else
        Edit2.Text := Edit2.Text + ´0´;
    end;
  Edit2.Text := Copy(Edit2.Text, Pos(´1´,Edit2.Text), Length(Edit2.Text));
  FreeMem(p);
end;



GOSTEI 0
Juarezber

Juarezber

12/04/2005

kapak, obrigado deu certo. obrigado pelas respostas a todos.

juarezber@terra.com.br


GOSTEI 0
POSTAR