cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 2011
-
31 août 2006 à 10:15
jinh68
Messages postés215Date d'inscriptionmardi 29 juillet 2003StatutMembreDernière intervention 1 septembre 2006
-
1 sept. 2006 à 11:28
Bonjour,
Je récupère des paquets via le port COM que je dois traiter ensuite.
Notament, dans ce paquet, il y a un timestamp sur 4 bytes répartis de cette manière:
seconds (6 bits)
minutes (6 bits)
hours (5 bits)
days (5 bits)
months (4 bits)
years (6 bits)
N'ayant jamais fait ce genre de chose, je vous demande de l'aide.
(Il faut transformer en binaire et recopier la longueur voulue dans un byte en rajoutant des 0 devant, nan ?)
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 20111 1 sept. 2006 à 09:37
Bin non... Ton code était bien pensé et avait l'air correct mais le résultat n'etait pas le bon.
Du coup, je fait tout simplement:
y := MaVar and $3F; MaVar := MaVar shr 6;
m := MaVar and $0F; MaVar := MaVar shr 4;
d := MaVar and $1F; MaVar := MaVar shr 5;
h := MaVar and $1F; MaVar := MaVar shr 5;
n := MaVar and $3F; MaVar := MaVar shr 6;
s := MaVar and $3F;
Un truc:
En fait, je l'utilise comme ça:
cts := TCOMTimeStamp.Create(MaVar);
cts.Display;
cts.Free;
Vu que c'est dans une boucle, est ce que ça ne prendrait pas moins de ressources de l'initialiser avant et de faire une procedure qui prend le dWord en paramètre dans la boucle plutot que de construire et détruire la classe à chaque passage ?
jinh68
Messages postés215Date d'inscriptionmardi 29 juillet 2003StatutMembreDernière intervention 1 septembre 2006 1 sept. 2006 à 10:59
Excuse moi pour la faute d'étourderie pour le Packet.
Concernant ton autre question, il te suffit de mettre la procedure GetCOMTimeStampFrom(Packet: DWORD); en public.
j!nH
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 20111 1 sept. 2006 à 11:19
Je me suis un peu amusé avec:
public
maDate: TDateTime;
constructor Create();
function Display: String;
procedure setMaDate();
procedure GetCOMTimeStampFrom(Packet: DWORD);
procedure TCOMTimeStamp.setMaDate;
begin
maDate := EncodeDateTime(2000+Years,Months,Days,Hours,Minutes,Seconds,0);
end;
Comme ça, je la met au format que je veux:
cts.setMaDate;
StrCat(code,PChar(FormatDateTime('dd/mm/yy',cts.maDate)));
...