Bonjour,
Je suis a la recherche d'une fonction en C qui permette de transformer un entier en octer. Un truc du genre :
char * IntToOctet (int entier)
Est ce que quelqu'un a deja fait ca?
merci
Bonjour,
Je suis a la recherche d'une fonction en C qui permette de transformer un entier en octer. Un truc du genre :
char * IntToOctet (int entier)
Est ce que quelqu'un a deja fait ca?
merci
Il faut travailler avec les opérateurs bitwise.
C'est un défi?Envoyé par Emmanuel Delahaye
Il faut juste faire gaffe à la taille des entiers utilisés avec "sizeof".
Un octet est un objet d'exactement 8 bits. J'ai du mal à saisir ce que tu veux faire exactement.Envoyé par personne64
On peut faire ça :
qui mets le bits de poids fort à 0 et laisse les 8 bits de poids faibles intacts... mais je ne suis pas sûr que ce soit ça que tu veuilles...
Code : Sélectionner tout - Visualiser dans une fenêtre à part unsigned int x = 1234 & 0xFF;
Ca m'interesse de savoir ce que tu as compris de la question, parce que pour moi, c'est flou...Envoyé par seriousme
Je pense qu'il veut afficherEnvoyé par Emmanuel Delahaye
au lieu de 170.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 10101010
Pas astucieux, pas optimisé mais l'idée est là.
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 void convert(int n){ int binaire[32]={0}; int i=0; int mask=1; int a; for(i=0;i<32;i++){ a=0; if((n&mask)==mask){ a=1; } binaire[i]=a; mask=mask<<1; } for(i=31;i>=0;i--){ printf("%d",binaire[i]); } }
L'interface du P.O. étaitEnvoyé par seriousme
Code : Sélectionner tout - Visualiser dans une fenêtre à part char * IntToOctet (int entier)
Un programme qui
par exemple pour 3 donne 00000011
je test le code , merci
No problem:Envoyé par Emmanuel Delahaye
et:
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 char* convert(int n){ char *binaire=calloc(33,sizeof(char)); int i=0; int mask=1; char a; for(i=0;i<32;i++){ a='0'; if((n&mask)==mask){ a='1'; } binaire[31-i]=a; mask=(mask<<1); } binaire[32]=0; return binaire; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char *s=convert(3640); printf("%s",s);
Ah, il fait être plus précis.Envoyé par personne64
Tu veux, à partir de la valeur d'un entier, produire une chaine représentanat celle-ci sous forme binaire sur une largeur de 8 bits.
- L'entier doit être non signé.
- La valeur doit être comprise entre 0 et 255
- Il est souhaitable de fournir à la fonction l'adresse et la taille d'un tableau de char.
La fonction retourne 0 si tout c'est bien passé ou 1 en cas d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int integer2bin (char *s_out, size_t size, unsigned int value);
- Adresse de s_out valant 0.
- Taille de s_out < 9.
- Valeur de value > 255
C'est bon j'ai édité.
Ca marche mais je ne comprend pas pourquoi l'autre buggait.
Je m'étais amusé à faire ça sur un autre forum
Le programme n'écrit pas les 0 "inutiles", si il faut les écrire il suffit d'enlever le flag.
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 char *binaire2(unsigned int x) { unsigned int n = 1 << CHAR_BIT * (sizeof(unsigned int)) - 1; // pour être plus portable (include <limits.h>) unsigned int val; int flag = 0; char *res = malloc(CHAR_BIT * (sizeof(unsigned int))+ 1); char *ptr; if (res) { ptr = res; while (n != 0) { val = x & n; if (flag == 1 && val == 0) *ptr++ = '0'; else if (val) { *ptr++ = '1'; flag = 1; } n >>= 1; } *ptr = 0; } return res; }
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Le souci c'est qu'il ne formate pas sous forme d'octet:Le programme n'écrit pas les 0 "inutiles"
avec 70 on obtient 1000110, 01000110 est plus "propre".
D'où ma remarque sur le fait qu'il suffit de supprimer le flag
D'autre part je travaille sur des unsigned int pas des char !
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Mais sans le flag il y a des zéros en trop, comme avec la mienne.
Je n'ai pas suivi toute la discussion, mais là, j'avoue que je ne comprends rien, il y a des 0 en trop ou pas, que veux-tu exactement ?
Petit rappel ma fonction est faite pour des unsigned int, pas des char !
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Voila là c'est un formatage octet par octet:
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 char* convert(int n){ char *binaire=calloc(33,sizeof(char)); int i=0; int mask=1; char a; for(i=0;i<32;i++){ a='0'; if((n&mask)==mask){ a='1'; } binaire[31-i]=a; mask=(mask<<1); } char *bin=strchr(binaire,'1'); binaire=bin-(bin-binaire)%8; return binaire; }
Partager