écriture d'un nombre sur 3 octets

Résolu/Fermé
Mr_Kiyoshi Messages postés 28 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014 - Modifié par Mr_Kiyoshi le 16/06/2014 à 13:29
Mr_Kiyoshi Messages postés 28 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014 - 18 juin 2014 à 13:23
Bonjour j'aimerai écrire une vitesse allant de 0 à 999 sur 3 octet dans une mémoire (une adresse correspondant à un chiffre) sauf que je ne sais comment récupéré les unité/dizaines/centaines par exemple 20 Tr/min j'aimerai écrire 0 2 0 en ascii.

Merci
A voir également:

4 réponses

EGP-Swyx Messages postés 6664 Date d'inscription dimanche 18 mars 2012 Statut Contributeur Dernière intervention 7 janvier 2019 625
16 juin 2014 à 13:34
Pour écrire un nombre qui va de 0 à 999, t'as besoins de moins de 3 octets.

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)
1
Merci pour vos réponses,
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
1
EGP-Swyx Messages postés 6664 Date d'inscription dimanche 18 mars 2012 Statut Contributeur Dernière intervention 7 janvier 2019 625
16 juin 2014 à 15:40
Ah... dans ce cas... te prends pas la tête.

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
0
Mr_Kiyoshi > EGP-Swyx Messages postés 6664 Date d'inscription dimanche 18 mars 2012 Statut Contributeur Dernière intervention 7 janvier 2019
16 juin 2014 à 16:01
Merci beaucoup pour ta réponse détaillé ça devrait le faire
0
Mr_Kiyoshi > EGP-Swyx Messages postés 6664 Date d'inscription dimanche 18 mars 2012 Statut Contributeur Dernière intervention 7 janvier 2019
16 juin 2014 à 16:01
Merci beaucoup pour ta réponse détaillé ça devrait le faire
0
EGP-Swyx Messages postés 6664 Date d'inscription dimanche 18 mars 2012 Statut Contributeur Dernière intervention 7 janvier 2019 625
Modifié par EGP-Swyx le 16/06/2014 à 16:03
Mais de rien =)

Il ne reste qu'à espérer que le langage que tu utilise ne cast pas le résultat d'une division :/
0
Mr_Kiyoshi > EGP-Swyx Messages postés 6664 Date d'inscription dimanche 18 mars 2012 Statut Contributeur Dernière intervention 7 janvier 2019
16 juin 2014 à 16:04
Non t'inquiète ça va le faire
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
17 juin 2014 à 10:34
Salut Mr_Kiyoshi,

Si tu as un entier (un
int
en C), et que tu veux obtenir 3 caractères (des
char
en 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
1
Mr_Kiyoshi Messages postés 28 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
17 juin 2014 à 12:49
est ce que si j'écris dans la mémoire st_toursmin[0] je vais écrire '1' si on à 120 tour/min?
0
Mr_Kiyoshi Messages postés 28 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
17 juin 2014 à 13:04
et à quoi sert la ligne 13 ?
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 17/06/2014 à 14:18
est ce que si j'écris dans la mémoire st_toursmin[0] je vais écrire '1' si on à 120 tour/min?

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
0
EGP-Swyx Messages postés 6664 Date d'inscription dimanche 18 mars 2012 Statut Contributeur Dernière intervention 7 janvier 2019 625
17 juin 2014 à 14:22
je ne connaissais pas sprintf mais en effet c'est vraiment très puissant!
0
Mr_Kiyoshi Messages postés 28 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
17 juin 2014 à 14:27
ok merci à vous je vais faire comme ça
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
16 juin 2014 à 14:02
Bonjour,

Le plus simple est de faire 3 boucles variant de '0' à '9'.
Et tu affiches chacun des éléments : printf("%c%c%c\n", i, j, k);

Cdlt,
0
Mr_Kiyoshi Messages postés 28 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 18 juin 2014
16 juin 2014 à 15:30
ça me permettra d'écrire le nombre sur 3 adresse?
0