écriture d'un nombre sur 3 octets

Résolu
Mr_Kiyoshi Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -  
Mr_Kiyoshi Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   625
 
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
Mr_Kiyoshi
 
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   Statut Contributeur Dernière intervention   625
 
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   Statut Contributeur Dernière intervention  
 
Merci beaucoup pour ta réponse détaillé ça devrait le faire
0
Mr_Kiyoshi > EGP-Swyx Messages postés 6664 Date d'inscription   Statut Contributeur Dernière intervention  
 
Merci beaucoup pour ta réponse détaillé ça devrait le faire
0
EGP-Swyx Messages postés 6664 Date d'inscription   Statut Contributeur Dernière intervention   625
 
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   Statut Contributeur Dernière intervention  
 
Non t'inquiète ça va le faire
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
et à quoi sert la ligne 13 ?
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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   Statut Contributeur Dernière intervention   625
 
je ne connaissais pas sprintf mais en effet c'est vraiment très puissant!
0
Mr_Kiyoshi Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
ok merci à vous je vais faire comme ça
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention  
 
ça me permettra d'écrire le nombre sur 3 adresse?
0