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 :)
Version imprimable
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
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:
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; }
Salut,
Un algo assez simple à comprendre mais pas optimisé du tout.
A+
Pfeuh
Code:
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(""); }