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![]()
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![]()
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
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
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.
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(""); }
Partager