Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Convertir un Single en 4 char (https://www.clubdelphi.com/foros/showthread.php?t=44781)

cmurua71 14-06-2007 10:25:17

Convertir un Single en 4 char
 
Hola ! Tengo un problema que no sé como resolver, he intentado de cientos de formas sin exito.

Debo enviar por el puerto serie un Single, pero para enviarlo debo convertirlo en 4 caracteres (chars)

Seria lo contrario a lo que preguntaba en otro post:


http://www.clubdelphi.com/foros/showthread.php?t=30929

Me urge solucionar este tema, CUALQUIER ayuda urgente sera bienvenida

Desde ya muchisimas GRACIASS

Carlos

Mick 14-06-2007 12:23:51

Hay varias formas de hacerlo, por ejemplo usando nuestros amigos los punteros:

Código:

var
  ptr      :PChar;
  number:single;
  c1,c2,c3,c4:char;
begin

  number:= 13.34;
  ptr:= @number;
  c1:= ptr[0];
  c2:= ptr[1];
  c3:= ptr[2];
  c4:= ptr[3];
 
  // O Directamente sin variables intermedias
  c1:= PChar(@number)[0];
  c2:= PChar(@number)[1];
  c3:= PChar(@number)[2];
  c4:= PChar(@number)[3]

end;

Saludos

cmurua71 14-06-2007 12:56:09

Cita:

Empezado por Mick
Hay varias formas de hacerlo, por ejemplo usando nuestros amigos los punteros:

Código:

var
  ptr      :PChar;
  number:single;
  c1,c2,c3,c4:char;
begin

  number:= 13.34;
  ptr:= @number;
  c1:= ptr[0];
  c2:= ptr[1];
  c3:= ptr[2];
  c4:= ptr[3];
 
  // O Directamente sin variables intermedias
  c1:= PChar(@number)[0];
  c2:= PChar(@number)[1];
  c3:= PChar(@number)[2];
  c4:= PChar(@number)[3]

end;

Saludos

No me funciona así... me da el error ¨Array type required¨ en las 4 lineas c1:=ptr[0] y subsiguientes

y no se como solucionarlo

cmurua71 15-06-2007 05:51:36

Alguna idea por favorr
 
Hola... alguein que me tire una idea ??

seoane 15-06-2007 11:25:26

Si te fijas un poco en el hilo anterior, yo creo que la solución es evidente.

En el hilo anterior convertíamos un String en PChar de la siguiente manera:
Código Delphi [-]
function StrToSingle(Str: String): Single;
begin
  if length(Str) = 4 then
    Result:= PSingle(@Str[1])^
  else
    Result:= 0;
end;

Asi que si aplicamos el paso inverso:
Código Delphi [-]
function SingleToStr(S: Single): String;
begin
  // Creamos el espacio suficiente en memoria
  Result:= StringOfChar(#0,4);
  // Y aplicamos el paso inverso
  PSingle(@Result[1])^:= S;
end;


La franja horaria es GMT +2. Ahora son las 07:03:54.

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