question sur la base 64

question sur la base 64 - C - Programmation

Marsh Posté le 02-04-2004 à 09:23:45    

Bonjour,
 
Voilà, j'ai trouvé ce code sur le le site salemioche.com, pour encoder en base 64. Mais, je ne comprend pas bien la partie avec les fprintg notamenet les | et &. Si quelqu'un pouvait m'aider !
 
Merci.
 

Code :
  1. #include <stdio.h>
  2. #define b(a) ((a>='A'&& a<='Z')?(a-65):\
  3.               ((a>='a' && a<='z')?(a-71):\
  4.                ((a>='0' && a<='9')?(a+4):\
  5.                 ((a=='+')?(62):\
  6.                  ((a=='/')?(63):(0))\
  7.                 )\
  8.                )\
  9.               )\
  10.              )
  11. #define isEnd(a) if ( a == '=' ) break;
  12. int main ( int argc, char *argv[] ) {
  13.   FILE *f, *g;
  14.   unsigned char buff[4];
  15.   if ( !(f = fopen(argv[1],"r" ))) f = stdin ;
  16.   if ( !(g = fopen(argv[2],"w" ))) g = stdout;
  17.   while ( fread(buff,1,4,f) == 4 ) {
  18.     fprintf(g,"%c",b(buff[0])<<2   | b(buff[1])>>4 & 0x3 );
  19.     isEnd(buff[2])
  20.     fprintf(g,"%c",b(buff[1])<<4 | b(buff[2])>>2 & 0xF);
  21.     isEnd(buff[3])
  22.     fprintf(g,"%c",b(buff[2])<<6 | b(buff[3]) & 0x3F);
  23.   }
  24.   fclose(f);
  25.   fclose(g);
  26.   return 0;
  27. }

Reply

Marsh Posté le 02-04-2004 à 09:23:45   

Reply

Marsh Posté le 02-04-2004 à 09:26:29    

| ou binaire
& et binaire
<< et >> décalages binaires

Reply

Marsh Posté le 02-04-2004 à 09:35:44    

Merci, pour ces infos mais cela c'était ok !
 
En fait, c'est plus sur le sens de :
b(buff[0])<<2   | b(buff[1])>>4 & 0x3  
par exemple.
 
Merci encore.

Reply

Marsh Posté le 02-04-2004 à 10:09:49    

c'est juste une suite d'operations binaires, y a rien a comprendre !
 
decalage de 2 sur le resultat de b ( buff[0] )
decalage de 4 sur le resultat de b ( buff[1] )
'ou' binaire entre les 2
'et' binaire entre ce resultat et 0x3, soit 00000011
 
c'est tout :p

Reply

Marsh Posté le 02-04-2004 à 12:37:28    

Bon, j'ai du mal m'exprimé,
 
Ma question, en clair, c'est plus en quoi cela encode en base 64, les bases du chagement en base 64.
 
Merci et à bientôt

Reply

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

ah bah ca, faut que tu l'ecrives en detail pour voir les petites optimisations d'ecriture qui font que ca marche :D

Reply

Sujets relatifs:

Leave a Replay

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