Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   convertir de 'TCaption' para usar su valor en 'PAnsiChar' (https://www.clubdelphi.com/foros/showthread.php?t=7927)

jbgpina 02-03-2004 13:37:03

convertir de 'TCaption' para usar su valor en 'PAnsiChar'
 
Ante todo disculparme por si lo que expongo a continuacion es una supina estupidez, pero solo proguntando se aprende.

Vengo del mundo Clipper y alli el manejo de variables no es tan estrixto como en Delphi.

Mi problema es el siguiente.:

procedure TForm1.cVisorHexChange(Sender: TObject);
var i:integer;
Var Buffer:array[0..15] of char;
begin

{ esta es la funcion que pretendo usar.:

function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer

Si entiendo bien

Text := a la cadena de caracteres a convertir
Buffer := Puntero al inicio del array donde queremos salvar el resultado
BufSize := Tamaño del Buffer

El problema viene al usar form1.cVisorHex.Text que es la cadena que contiene el valor a convertir pero que es de tipo TCaption y me da el siguiente error .:
[Error] Fecha.pas(202): Incompatible types: 'TCaption' and 'PAnsiChar'

La pregunta es.: como paso de un tipo a otro, con que funcion?????

}
i := HexToBin( form1.cVisorHex.Text, Buffer; Sizeof( Buffer ) )
end;


Agradezco vuestra ayuda por adelantado.

delphi.com.ar 02-03-2004 13:46:00

Un TCaption no es mas que un simple string
Código:

  TCaption = type string;
Para poder hacer el cast a PChar o PAnsiChar, podrías hacer:
Código:

HexToBin(PChar(form1.cVisorHex.Text), Buffer, Sizeof(Buffer));
HexToBin(PAnsiChar(form1.cVisorHex.Text), Buffer, Sizeof(Buffer));

Saludos!

jbgpina 02-03-2004 14:21:51

Gracias DELPHI.COM.AR tu respuesta a sido perfecta, pero parece que sigo sin entender bien el funcionamiento de

{function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer}

el resultado Binario lo almacena en buffer???

en tipo char ???

lo que yo deseo es el resultado en formato cadena alfanumerica de pasar un Hex a Binario, esta funcion sirve o tengo que usar otra???

Disculpa por la torpeza

delphi.com.ar 02-03-2004 14:45:20

Cita:

Empezado por jbgpina
el resultado Binario lo almacena en buffer???

Exacto... debes crear un buffer y asignar espacio en memoria, sinó producirás un AccessViolation!

Saludos!

jbgpina 03-03-2004 12:21:00

Erre que Erre!!!!!!!!!!!
 
Imposible no consigo que el Buffer contenga la cadena alfanumerica con la representacion Binaria del Hex en cadena alfanumerica que le paso, podeis poner un ejemplo que funcione.

Gracias y disculpar por mi cerrazon mental. :)

delphi.com.ar 03-03-2004 14:06:45

Esta es una de las tantas formas de hacerlo:
Código:

function HexToBinStr(Value: string) : string;
var
  Buffer: PChar;
  BuffSize: Integer;
begin
  BuffSize := Length(Value) div 2;
  Buffer := StrAlloc(BuffSize);
  try
    ZeroMemory(Buffer, BuffSize);
    HexToBin(PChar(Value), Buffer, BuffSize);
    Result := Buffer;
  finally
    StrDispose(Buffer);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := HexToBinStr('303132333435363738393a3b3c3d')
end;

Una forma mucho mas sencilla es trabajar directamente con el resultado:
Código:

function HexToBinStr(Value: string) : string;
var
  BuffSize: Integer;
begin
  BuffSize := Length(Value) div 2;
  Result := StringOfChaR(#0, BuffSize);
  HexToBin(PChar(Value), PChar(Result), BuffSize);
end;

Saludos!


La franja horaria es GMT +2. Ahora son las 15:47:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi