écriture d'un nombre sur 3 octets
RésoluMr_Kiyoshi Messages postés 28 Statut Membre -
Merci
- écriture d'un nombre sur 3 octets
- Écriture facebook - Guide
- Ecriture insta - Guide
- Ai suite 3 - Télécharger - Optimisation
- Ecriture en gras - Guide
- Nombre facile - Télécharger - Outils professionnels
4 réponses
L'objectif est d'encoder une vitesse de 0 à 999 sur trois octets, chaque octet correspondant aux unités, dizaines et centaines et de stocker ces chiffres sous forme ASCII. La solution la plus pratique en C consiste à convertir l'entier en trois caractères via snprintf("%03d"), ce qui remplit les zéros à gauche et fournit directement les trois chiffres. Des approches alternatives discutées incluent l'extraction des centaines, dizaines et unités par divisions et la conversion en ASCII avec '0' + chiffre, ou encore une solution matérielle utilisant environ 10 bits pour couvrir 0–999. Une nuance utile est que certaines configurations matérielles privilégient une écriture binaire par adresses séparées plutôt que l'ASCII, selon le contexte et les contraintes mémoire.
1024 = 2^10. donc tu as besoin de 10 bits pas plus.
décris moi le truc et je te dirais si t'as pas moyen de faire plus simple. parce que je ne vois pas l'intérêt de ta technique. (passer 020 en 0 2 0)
Enfet c est pour un projet sur un moteur j'obtiens une vitesse en tour/min et je doit l'écrire dans une mémoire commune sur 3 adresse pour qu'en suite une autre carte viens lire ces trois adresses et l'affichera. Par exemple si j'ai une vitesse de 20 tr/min écrira 0 à une adresse 2 à la deuxième et 0 à la troisième
Si c'est comme en C, et que ton nombre est un int.
Si tu divise un int/int tu sors un int
Donc tu copie ça avec conversion dans ton lagage et tu test
------------------------------
Vitesse = Vitesse connue
nAdresse1 = Centaines
nAdresse2 = Dizaines
nAdresse3 = Unités
-------------------------------
*************
nAdresse1 = Vitesse / 100
Vitesse = Vitesse - nAdresse1 * 100
nAdresse2 = Vitesse / 10
nAdresse3 = Vitesse - nAdresse2 * 10
Exemple pouur 120
0 : *DEBUT*
1 : nA1 = 120 / 100 // = 1
2 : V = 120 - 1*100 // = 20
3 : nA2 = 20 / 10 // = 2
4 : nA3 = 20 - 2*10 // = 0
5 : *FIN*
V = 20
nA1 = 1
nA2 = 2
nA3 = 0
Si tu as un entier (un
inten C), et que tu veux obtenir 3 caractères (des
charen C), le fait d'effectuer des divisions va te donner des entiers.
Comme ce que tu veux, ce sont des char, le plus simple est d'utiliser sprintf, et d'utiliser les spécificateurs te permettant de combler à gauche par des zéros.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int tours_min = 20;
char st_toursmin[4];
if ( (tours_min > 999) || (tours_min < 0) ) {
printf("Erreur tours_min n'a pas une valeur correcte\n");
return EXIT_FAILURE;
} else {
snprintf(st_toursmin, 4, "%03d", tours_min);
printf("Premier digit : %c\n", st_toursmin[0]);
printf("Deuxième digit : %c\n", st_toursmin[1]);
printf("Troisième digit : %c\n", st_toursmin[2]);
}
return 0;
}
donne des char, comme tu le souhaites :
Premier digit : 0
Deuxième digit : 2
Troisième digit : 0
Dal
Cela va écrire la premier caractère contenu dans la chaîne de caractères st_toursmin, c'est à dire le caractère '1' ou 49 en ASCII, si la chaîne contient "120".
et à quoi sert la ligne 13 ?
snprintf est une fonction du C standard, qui formate une chaîne avec des spécificateurs de format, à la manière de printf, mais qui, au lieu d'envoyer le résultat formaté vers l'écran, envoie le résultat vers une variable de type
* char(chaîne de caractère en C). En outre, snprintf permet de spécifier la taille maximale du tampon destiné à accueillir la chaîne C, de façon à éviter les débordements de mémoire.
Pour les spécificateurs, tu peux les consulter sur cette documentation de printf, puisque ce sont les mêmes.
Dal