Hello,
Je viens pour vous demander un peu d'aide!
En fait, je voudrait mettre en difference la gestion memoire sous les architechture little/big endian ! Pour cela, je voudrais afficher la valeur en binaire d'un nombre octet par octet! Oui, c'est un peu confus ...
En gros cree un unsigned int et je recupere son adresse dans un char * pour afficher octets par octet... le probleme c'est que ... ... ca ne fonctionne pas !!! Et je ne comprend pas pourquoi! Un peu d'aide serait la bienvenue !
Voil mon code :
resultat sous une archi little endian :
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 #include <unistd.h> int my_putchar(int c) { return (write(1, &c, 1)); } void test_conv(const unsigned int nbr) { char *nbr_addr; unsigned int mask; nbr_addr = (char *) &nbr; mask = 0x800000; while (mask) { my_putchar('0' + ((nbr & mask) != 0)); mask >>= 1; if (mask == 0x80000 || mask == 0x8000 || mask == 0x800 || mask == 0x80 || mask == 0x8) my_putchar('\''); } my_putchar('\n'); } void aff_octet(const char nbr) { int mask; mask = 0x8; while (mask) { my_putchar('0' + ((nbr & mask) != 0)); mask >>= 1; } } void aff_val(const unsigned int nbr) { char *nbr_addr; unsigned int mask; nbr_addr = (char *) &nbr; mask = 0xF00000; while (mask) { aff_octet(*nbr_addr++); mask >>=4; if (mask) my_putchar('\''); } my_putchar('\n'); } int main() { test_conv(0xFABC80); aff_val(0xFABC80); return (0); }
et big endian
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 /tmp $>cc endian.c -Wall -Wextra && ./a.out 1111'1010'1011'1100'1000'0000 0000'1100'1010'0000'0000'0011D'avance, merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 > /usr/sfw/bin/gcc endian.c -o test > ./test 1111'1010'1011'1100'1000'0000 0000'1010'1100'0000'0000'0000
Partager