Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-03-2004
jbgpina jbgpina is offline
Registrado
 
Registrado: mar 2004
Posts: 5
Poder: 0
jbgpina Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 02-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 02-03-2004
jbgpina jbgpina is offline
Registrado
 
Registrado: mar 2004
Posts: 5
Poder: 0
jbgpina Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 02-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 03-03-2004
jbgpina jbgpina is offline
Registrado
 
Registrado: mar 2004
Posts: 5
Poder: 0
jbgpina Va por buen camino
Unhappy 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.
Responder Con Cita
  #6  
Antiguo 03-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:02:19.


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
Copyright 1996-2007 Club Delphi