cs_difficile
Messages postés2Date d'inscriptionjeudi 12 mai 2005StatutMembreDernière intervention 5 août 2005
-
12 mai 2005 à 09:33
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 2009
-
13 mai 2005 à 17:31
Bonjour,
J'utilise Delphi 7 pour communiquer avec un automate Télémécanique
et je rencontre un probléme pour convertir un nombre flotant (32 bits)
en binaire. Je communique avec un socket TCPIP et pour construire la trame
il me faut des octets. exemple: Edit1.text = 253.7521 à transferer dans
une variable automate (real 32 bits) donc il faut construire les 4 bytes.
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 12 mai 2005 à 21:54
Tout à fait Kenavo.
Pour être précis :
"Le format flottant utilisé est celui de la norme IEEE STD 734-1985 (équivalence IEC559). La longueur des mots est de 32 bits, ce qui correspond à des nombres flottants simple précision."
Par contre c'est direct :
var
IEEE32 : Single;
begin IEEE32 := FloatToStr(Edit1.text) ;
// IEEE32 contient le nombre au format réel, tu le transmets tel quel.
// La valeur récupérée pourra être directement utilisée dans un %MF
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 13 mai 2005 à 17:31
Et à la question que tu te poses maintenant :
Oui, tu peux faire l'opération inverse à partir d'un paquet d'octets reçu :
T
ype TTab4Byte = Array[0..3] of Byte;
PTab4Byte = ^TTab4Byte;
var
Ptr : PTab4Byte;
IEEE32 : Single;
begin Ptr : = Pointer(@IEEE32); // et les 4 octets sont : Ptr^[0], Ptr^[1]
, Ptr^[2]
et Ptr^[3]
Ptr^[0]:= OctetsRecus[i];
Ptr^[1]:=OctetsRecus[i+1];
Ptr^[2]:=OctetsRecus[i+2];
Ptr^[3]:=OctetsRecus[i+3];
end ;
On peut aussi créer un pointeur sur Single,
var
PileReception : array[0..99] of byte; // la pile de reception de données
........
var
IEEE32 : Single;
ps : ^Single;
begin
Ps : = Pointer(@pile[i]); // i est l'index du premier octet du réel