Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Codage BCD

18 réponses
Avatar
Yo
Bonjour,

Selon un protocole de communication, je dois coder une date en BCD sur
6 octets.

Si j'ai bien compris le BCD, le codage du 20 Décembre 2010 serait :

date[0] = 0x20;
date[1] = 0x12;
date[2] = 0x10;

Mais cela ne donne que 3 octets.

Quelqu'un peut il confirmer (ou infirmer) mon codage, et éventuellement
m'indiquer comment je peux stocker la date sur 6 octets au lieu de 3 ?

Merci.

10 réponses

1 2
Avatar
Olivier Miakinen
Bonjour,

Le 06/10/2010 11:26, Yo a écrit :

Selon un protocole de communication, je dois coder une date en BCD sur
6 octets.



C'est vague, comme spécification.

Si j'ai bien compris le BCD, le codage du 20 Décembre 2010 serait :

date[0] = 0x20;
date[1] = 0x12;
date[2] = 0x10;



À priori, j'imaginerais plutôt :
date = 0x20122010; // 20/12/2010
ou :
date = 0x20102012; // 2010/20/12
voire :
date = 0x01022102; // 20/12/2010, "little endian"
... les possibilités sont innombrables.

Quelqu'un peut il confirmer (ou infirmer) mon codage, et éventuellement
m'indiquer comment je peux stocker la date sur 6 octets au lieu de 3 ?



Que dit la norme définissant ce protocole ?

--
Olivier Miakinen
Avatar
Yo
Olivier Miakinen a présenté l'énoncé suivant :


Que dit la norme définissant ce protocole ?



Rien de plus, hélas ...
Avatar
Serge Paccalin
Le Wed, 06 Oct 2010 14:17:18 +0200, Yo a écrit
(dans <news:i8hpcl$4gi$, posté
dans fr.comp.lang.c++) :

Olivier Miakinen a présenté l'énoncé suivant :

Que dit la norme définissant ce protocole ?



Rien de plus, hélas ...



Difficiel de trancher, alors.

Personnellement, je pencherais pour 0x02,0x00,0x01,0x02,0x01,0x00 pour
le 20 décembre 2010, soit une date à six chiffres et un octet par
chiffre de 0x00 à 0x09. C'est le moyen le plus plausible pour avoir six
octets, et appeler ça du BCD. Resterait à connaître l'ordre : ISO,
européen ou américain.

--
___________
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
Avatar
Serge Paccalin
Le Wed, 6 Oct 2010 14:35:16 +0200, Serge Paccalin a écrit
(dans <news:, posté
dans fr.comp.lang.c++) :

Difficiel



… disait l'ingénieur logicile…

Vais reprendre un café, moi.

--
___________
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
Avatar
Michel__D
Bonjour,

Yo a écrit :
Bonjour,

Selon un protocole de communication, je dois coder une date en BCD sur 6
octets.

Si j'ai bien compris le BCD, le codage du 20 Décembre 2010 serait :

date[0] = 0x20;
date[1] = 0x12;
date[2] = 0x10;

Mais cela ne donne que 3 octets.

Quelqu'un peut il confirmer (ou infirmer) mon codage, et éventuellement
m'indiquer comment je peux stocker la date sur 6 octets au lieu de 3 ?

Merci.



Bien que je n'ai pas vraiment la réponse exacte à te donner ,le codage BCD
(binaire codé décimal) signifie que chaque quartet correspond à un chiffre.

Donc un octet (2 quartet) permet de coder une valeur maxi de 99.

Une date pourrait être codé avec maximum 4 octets, reste à savoir s'il ne
faut pas aussi fournir le jour de la semaine ainsi que le numèro de la semaine.
Avatar
Yo
Michel__D avait prétendu :


Bien que je n'ai pas vraiment la réponse exacte à te donner ,le codage BCD
(binaire codé décimal) signifie que chaque quartet correspond à un chiffre.

Donc un octet (2 quartet) permet de coder une valeur maxi de 99.

Une date pourrait être codé avec maximum 4 octets, reste à savoir s'il ne
faut pas aussi fournir le jour de la semaine ainsi que le numèro de la
semaine.



Ou alors il s'agit de la date et de l'heure ?
Avatar
Michel__D
Re,

Yo a écrit :
Michel__D avait prétendu :


Bien que je n'ai pas vraiment la réponse exacte à te donner ,le codage
BCD
(binaire codé décimal) signifie que chaque quartet correspond à un
chiffre.

Donc un octet (2 quartet) permet de coder une valeur maxi de 99.

Une date pourrait être codé avec maximum 4 octets, reste à savoir s'il ne
faut pas aussi fournir le jour de la semaine ainsi que le numèro de
la semaine.



Ou alors il s'agit de la date et de l'heure ?



Ce qui serait plus plausible.

3 octets pour la date et 3 octets pour l'heure.

PS:Si tu as la possibilité d'obtenir/demander/requêter le statut de la
date tu obtiendras peut-être le format utilisé et à utiliser.
Avatar
Olivier Miakinen
Le 06/10/2010 16:50, Michel__D a écrit :

Ou alors il s'agit de la date et de l'heure ?



Ce qui serait plus plausible.

3 octets pour la date et 3 octets pour l'heure.



... ou alors 4 octets pour la date (année complète) et 2 pour l'heure
(sans les secondes). Là encore tout est possible.

--
Olivier Miakinen
Avatar
Fabien LE LEZ
On Wed, 06 Oct 2010 11:26:28 +0200, Yo :

Selon un protocole de communication, je dois coder une date en BCD sur
6 octets.



Si mes souvenirs sont bons, BCD, c'est un octet par chiffre décimal.

Le 20/12/10 serait donc codé "201210"
(ou peut-être 0x02 0x00 0x01 0x02 0x01 0x00, mais ça m'étonnerait.)
Avatar
Michel__D
Bonjour,

Yo a écrit :
Bonjour,

Selon un protocole de communication, je dois coder une date en BCD sur 6
octets.

Si j'ai bien compris le BCD, le codage du 20 Décembre 2010 serait :

date[0] = 0x20;
date[1] = 0x12;
date[2] = 0x10;

Mais cela ne donne que 3 octets.

Quelqu'un peut il confirmer (ou infirmer) mon codage, et éventuellement
m'indiquer comment je peux stocker la date sur 6 octets au lieu de 3 ?

Merci.



Comme j'avais une petit doute, j'ai reouvert un bouquin d'assembleur du 8086/8088
et donc il y a bien le BCD condensé pour laquelle j'ai fourni la description et
il y a le BCD non condensé qui utilise un octet par chiffre et qui pourrait bien
coller à la demande, enfin bref on n'est toujours pas avancé pour autant sur le format !
1 2