Découpage de bytes

Résolu
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 31 août 2006 à 10:15
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Derniè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 ?)

Merci d'avance.

<!-- / message -->
<!-- sig -->

26 réponses

jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
31 août 2006 à 21:15
Et le reste marche?

j!nH
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
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;
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
1 sept. 2006 à 10:55
C'est bon en fait... Ca marche bien.
Je ne sais pas si tu as changé quelque chose ou si c'est moi qui l'utilisait mal.

J'ai juste changé ça:
property Packet: DWord read FPacket;

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 ?
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Derniè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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
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)));
...

C'est extra... Merci mille fois.
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
1 sept. 2006 à 11:28
Oui, le code est bien ouvert pour que l'on puisse facilement faire sa sauce par dessus ;).

De rien, bonne journée !

j!nH
0
Rejoignez-nous