Ver la Versión Completa : Convertir un Single en 4 char
cmurua71
14-06-2007, 10:25:17
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
Hay varias formas de hacerlo, por ejemplo usando nuestros amigos los punteros:
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
Hay varias formas de hacerlo, por ejemplo usando nuestros amigos los punteros:
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
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:
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:
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;
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.