IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Afficher un nombre avec 'write()'


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut Afficher un nombre avec 'write()'
    Bonjour je cherche à afficher un int signed avec la fonction write !!

    Si quelqu'un avait une idée pour démarrer!

    Moi quand je tape 12345

    j'arrive à peu près à obtenir 54321 !!

    Si quelqu'un sait m'aider

    Merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    On peut voir le bout de ton code qui fait le write() s'il te plait
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    C'est très simple: Tu utilises un buffer, que tu inverses avant d'écrire (ou que tu remplis carrément en sens inverse).

    Version aver remplissage du buffer à l'envers:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include <limits.h>
    #define BIG_ENOUGH_FOR_LONG_LONG ((sizeof(long long)*CHAR_BIT+2)/3 +1)
     
    int write_unumber(int fd, unsigned long long val)
    {
    	char buf[ BIG_ENOUGH_FOR_LONG_LONG ];
    	size_t i = sizeof buf;
    	int bFirst = 1; /*Pour écrire quand même le "0" si val==0 */
     
    	while(val != 0 || bFirst)
    	{
    		bFirst = 0;
    		buf[--i] = (val%10) + '0';
    		val /= 10;
    	}
    	return write(fd, buf+i, sizeof buf - i);
    }
     
    int write_number(int fd, long long val)
    {
    	int ret;
    	int addRet = 0;
    	if(val<0)
    	{
    		char output = '-';
    		ret = write(1, &output, 1);
    		if(ret < 0)
    			return ret;
    		val = -val;
    		addRet = ret;
    	}
    	ret = write_unumber(fd, (unsigned long long)val);
    	if(ret >= 0)
    		ret += addRet;
    	return ret;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Un algo assez simple à comprendre mais pas optimisé du tout.

    A+

    Pfeuh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    /* ********************************************
       *** expected to work with signed 32 bits ***
       ******************************************** */
    typedef int s32;
    typedef int bool;
    #define false 0
    #define true 1
    void write_s32(s32 value)
    {
        s32 rest;
        s32 divisor;
        bool print_started = false;
     
        if(value & 0x80000000)
        {
            value = -value;
            putchar('-');
        }
        divisor = 1000000000;
        while(value != 0)
        {
            rest = value % divisor;
            value = value / divisor;
            if(value != 0 && print_started == false)
                print_started = true;
            if(print_started == true )
                putchar('0' + value);
            value = rest;
            divisor = divisor / 10;
        }
        if (print_started == false)
            putchar('0');
    }
    int main(void)
    {
        write_s32(-12345);
        puts("");
        write_s32(0);
        puts("");
        write_s32(12345678);
        puts("");
        write_s32(0xffffffff);
        puts("");
    }

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/04/2011, 14h46
  2. Réponses: 13
    Dernier message: 07/05/2009, 10h52
  3. Réponses: 8
    Dernier message: 06/04/2006, 09h01
  4. Afficher un nombre avec 2 décimales.
    Par Higestromm dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/02/2006, 16h12
  5. [struts][]taglib bean] afficher html avec write
    Par mlequim dans le forum Struts 1
    Réponses: 6
    Dernier message: 04/11/2005, 18h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo