wong_sifu | 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 :
- #include <stdio.h>
- #define b(a) ((a>='A'&& a<='Z')?(a-65):\
- ((a>='a' && a<='z')?(a-71):\
- ((a>='0' && a<='9')?(a+4):\
- ((a=='+')?(62):\
- ((a=='/')?(63):(0))\
- )\
- )\
- )\
- )
- #define isEnd(a) if ( a == '=' ) break;
- int main ( int argc, char *argv[] ) {
- FILE *f, *g;
- unsigned char buff[4];
- if ( !(f = fopen(argv[1],"r" ))) f = stdin ;
- if ( !(g = fopen(argv[2],"w" ))) g = stdout;
- while ( fread(buff,1,4,f) == 4 ) {
- fprintf(g,"%c",b(buff[0])<<2 | b(buff[1])>>4 & 0x3 );
- isEnd(buff[2])
- fprintf(g,"%c",b(buff[1])<<4 | b(buff[2])>>2 & 0xF);
- isEnd(buff[3])
- fprintf(g,"%c",b(buff[2])<<6 | b(buff[3]) & 0x3F);
- }
- fclose(f);
- fclose(g);
- return 0;
- }
|
|