[C newbie] Comment convertir un tableau de binaire en caractère ?

Comment convertir un tableau de binaire en caractère ? [C newbie] - C - Programmation

Marsh Posté le 02-02-2004 à 11:56:16    

bonjour,
 
voila j'ai un tableau "int".. contenant que des 0 et 1.
ex : Tab[0] = 0 ,
Tab[1] = 1 ,
Tab[2] = 1 ,
Tab[3] = 0 ,
Tab[4] = 1 ,
Tab[5] = 1 ,
Tab[6] = 1 ,
Tab[7] = 1  
 
on lit bien 01101111 qui correspond en ASCII au caractère "o".
 
comment faire la conversion ? je n'en ai aucune idée...
 
merci

Reply

Marsh Posté le 02-02-2004 à 11:56:16   

Reply

Marsh Posté le 02-02-2004 à 12:22:30    

ben à la main. note que ton truc est complètement sous-efficace

Reply

Marsh Posté le 02-02-2004 à 12:25:17    

il faut utiliser les opérateur binaires | et &

Reply

Marsh Posté le 02-02-2004 à 12:26:49    

char c='o';
 
 
et après au travail !

Reply

Marsh Posté le 02-02-2004 à 12:29:35    

un truc du style
 

Code :
  1. char a = 0 ;
  2. for (int i=0 ; i<8 ; i++)
  3.     {
  4.     if (tab[i])
  5.         a |= 1 ;
  6.     a <<= 1 ;
  7.     }

Reply

Marsh Posté le 02-02-2004 à 12:31:20    

tu fais un branchement inutile, tu ruines les perfos la :o

Reply

Marsh Posté le 02-02-2004 à 12:33:44    

c'est juste. y'a un vilain cas de bord. je vous laisse corriger l'ébauche

Reply

Marsh Posté le 02-02-2004 à 12:54:58    

on déjà fait des milliers de sujets la dessus :o dont un mémorable où ça tapait dans tous les sens mais ou on a convergé vers une solution portable (8 :o)

Reply

Marsh Posté le 02-02-2004 à 17:29:02    

taz a écrit :

ben à la main. note que ton truc est complètement sous-efficace


 
désolé mais je comprend pas ce que vous me dite.
j'ai pas du bien me faire comprendre...  
je veux passer de d'un tableau  
0110111101101100...
a un tableau de caractère ASCII
"ol"... etc..  
 
comme je suis relativement débutant... je ne regarde pas trop du coté des performances..


Message édité par tyllermills le 02-02-2004 à 17:39:22
Reply

Marsh Posté le 02-02-2004 à 17:44:50    

pourquoi t'as un tableau d'int déjà ?

Reply

Marsh Posté le 02-02-2004 à 17:44:50   

Reply

Marsh Posté le 02-02-2004 à 17:56:57    

taz a écrit :

pourquoi t'as un tableau d'int déjà ?

parce que j'avais que des 1 ou des 0.
et nom prof veut pas qu'on utilise des booléen..
 
si y'a d'autre solution je suis preneur...  

Reply

Marsh Posté le 02-02-2004 à 17:58:24    

ok. en fait t'as rien compris à ton tp. ton prof te demande de foutre des 0 et des 1 dans un char à l'aide des opérateurs binaires, après, un simple putchar(c); et c'est gagné. donc pas besoin de tableau. juste un char


Message édité par Taz le 02-02-2004 à 17:58:58
Reply

Marsh Posté le 02-02-2004 à 18:54:22    

Faudrait voir l'intitulé exact...
 
Sinon, la représentation binaire 01001110 peut se convertir en valeur int en jouant avec les puissances de deux (0 * 128 + 1 * 64 + .. + 0 * 1). On a alors le code ASCII du caractère.

Reply

Marsh Posté le 02-02-2004 à 18:56:46    

Carbon > très mauvaise idée, je crois pas que le but de l'exerice soit de faire des multiplications.
 
toutes façons, y a que l'hexa qui m'aille :o

Reply

Marsh Posté le 02-02-2004 à 21:11:47    

taz a écrit :

Carbon > très mauvaise idée, je crois pas que le but de l'exerice soit de faire des multiplications.
 
toutes façons, y a que l'hexa qui m'aille :o


y'a pas vraiment d'exercice.. c'est un projet que je réalise.. et je me retrouve avec un tableau de bits .. représentant les code ascii..  
et moi je veux les afficher.. c 'est simple non ?
 
dans l'autre sens je sais le faire..

Reply

Marsh Posté le 02-02-2004 à 21:13:25    

mauvaise approche on te dit. un tableau de bits ça n'existe pas. utilise un char et les opérateurs binaires. toute façon avec ton approche, tu rajoute une étape inutile

Reply

Marsh Posté le 02-02-2004 à 23:33:45    

je comprend bien que ce ne soit pas excellent...  
mais j'ai utiliser mon tableau.. j'ai plus qu'a le décrypter pour le remette en tableau de caractère..  
 
mais je viesn d'avoir une idée.... je pense savoir comment faire.

Reply

Marsh Posté le 02-02-2004 à 23:33:59    

je comprend bien que ce ne soit pas excellent...  
mais j'ai utiliser mon tableau.. j'ai plus qu'a le décrypter pour le remette en tableau de caractère..  
 
mais je viesn d'avoir une idée.... je pense savoir comment faire.

Reply

Marsh Posté le 03-02-2004 à 00:32:08    

mais ce que tu ne comprends pas c'est qu'avec ta méthode tu te rajoute du travail !
 
printf("%c %d", 'c', 'c');
 
le but c'est que tu mettes ce qu'il faut dans un char, avec les opérateurs binaires. si tu fais un tableau, ben c'est pareil, faut que tu mettes ce qu'il faut dans un char, sauf que ce qu'il faut mettre dedans, tu t'es déjà fait chier à le mettre dans le tableau pour rien
 
ma mathode
 
valeurs -> char
 
ta méthode
 
valeurs -> tableau -> valeurs -> char

Reply

Marsh Posté le 04-02-2004 à 13:02:46    

voila ce que je voulais faire.. et j'ai réussit.
je sais, c'est certainement nul du point de vue programmation, mais ca marche..

Code :
  1. int conversion_bin_carac(char * tab_char,unsigned long * tab_bin,long ind)
  2. {
  3. int ret = -1;
  4. long i,j=0;
  5. char TC[8];
  6. // printf("********* CARACTERE ******\n" );
  7. //  printf("\n" );
  8.   for (i=0;i<3;i++)
  9.   {
  10.    TC[0] = (char) tab_bin[j] & 1;
  11.    TC[1] = (char) tab_bin[j+1] & 1;
  12.    TC[2] = (char) tab_bin[j+2] & 1;
  13.    TC[3] = (char) tab_bin[j+3] & 1;
  14.    TC[4] = (char) tab_bin[j+4] & 1;
  15.    TC[5] = (char) tab_bin[j+5] & 1;
  16.    TC[6] = (char) tab_bin[j+6] & 1;
  17.    TC[7] = (char) tab_bin[j+7] & 1;
  18.    j= j+8;
  19.    TC[0] = (TC[0] << 7) & 0x80;
  20.    TC[1] = (TC[1] << 6) & 0x40;
  21.    TC[2] = (TC[2] << 5) & 0x20;
  22.    TC[3] = (TC[3] << 4) & 0x10;
  23.    TC[4] = (TC[4] << 3) & 0x08;
  24.    TC[5] = (TC[5] << 2) & 0x04;
  25.    TC[6] = (TC[6] << 1) & 0x02;
  26.    TC[7] = TC[7]  & 0x01;
  27.    tab_char[ind+i] = TC[0] |TC[1] |TC[2] |TC[3] |TC[4] |TC[5] |TC[6] |TC[7];
  28.   // printf("%c",tab_char[i]);
  29.   }
  30. return ret;
  31. }

Reply

Marsh Posté le 04-02-2004 à 13:05:15    

ben oui, mais c'est mauvais et très lourd pour trois fois rien
 
c'est complètement inutile ton tableau d'entiers.

Reply

Marsh Posté le 04-02-2004 à 13:17:07    

genre
 
for(i=0; i<CHAR_BIT; ++i)
{
  faire quelque chose pour régler le bit qui va bien dans le char
  ou afficher le bit qui va bien
}
 
là tu t'ennuie pour rien à stocker dans ton tableau des bits : stokes bits directement ou ils doivent entre

Reply

Marsh Posté le 04-02-2004 à 13:46:22    

Taz a écrit :

ben oui, mais c'est mauvais et très lourd pour trois fois rien
 
c'est complètement inutile ton tableau d'entiers.


ce que tu comprends pas c'est que je m'en sert avant de mon tableau de bit !!!
je fait de la cryptographie !.. on travaille sur des "bits"... qu'on permute . ... etc...  

Reply

Marsh Posté le 04-02-2004 à 13:55:35    

oh là là... là tu travaille pas réellement sur les bits. ça n'est qu'une simulation.
 
ça m'étonne qu'en crypto vous utilisez de telle méthodes...

Reply

Marsh Posté le 04-02-2004 à 14:22:52    

1 octet pour stocker un bit ça me fait mal

Reply

Marsh Posté le 04-02-2004 à 14:28:01    

la il en est meme a 4octets par bit avec ses ints

Reply

Marsh Posté le 04-02-2004 à 14:30:06    

arf j'avais pas fait gaffe que c'etait des ints et pas des char en plus :D

Reply

Marsh Posté le 04-02-2004 à 15:02:12    

mais oui je sais.. ca fait mal..
mon but c'est de crypter.. pas de faire un sources fiable...

Reply

Marsh Posté le 04-02-2004 à 16:30:45    

ben tu cryptes rien là, même avec des char, il tu gaches ta mémoire
 
 
bon ton travail c'est de faire deux fonctions  
 
char set_bit(char c, unsigned offset, unsigned value);
et
unsgined get_bit(char c, unsigned offset);

Reply

Marsh Posté le 04-02-2004 à 17:38:02    

euh j'ose : bit slicing ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed