71 lines
1.4 KiB
C
71 lines
1.4 KiB
C
|
/*
|
||
|
* base64rev generator
|
||
|
*
|
||
|
* Copyright 2009-2010 Krzysztof Piotr Oledzki <ole@ans.pl>
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; either version
|
||
|
* 2 of the License, or (at your option) any later version.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
const char base64tab[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||
|
char base64rev[128];
|
||
|
|
||
|
#define base '#' /* arbitrary chosen base value */
|
||
|
#define B64MAX 64
|
||
|
#define B64PADV B64MAX
|
||
|
|
||
|
int main() {
|
||
|
char *p, c;
|
||
|
int i, min = 255, max = 0;
|
||
|
|
||
|
for (i = 0; i < sizeof(base64rev); i++)
|
||
|
base64rev[i] = base;
|
||
|
|
||
|
for (i = 0; i < B64MAX; i++) {
|
||
|
c = base64tab[i];
|
||
|
|
||
|
if (min > c)
|
||
|
min = c;
|
||
|
|
||
|
if (max < c)
|
||
|
max = c;
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < B64MAX; i++) {
|
||
|
c = base64tab[i];
|
||
|
|
||
|
if (base+i+1 > 127) {
|
||
|
printf("Wrong base value @%d\n", i);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
base64rev[c - min] = base+i+1;
|
||
|
}
|
||
|
|
||
|
base64rev['=' - min] = base + B64PADV;
|
||
|
|
||
|
base64rev[max - min + 1] = '\0';
|
||
|
|
||
|
printf("#define B64BASE '%c'\n", base);
|
||
|
printf("#define B64CMIN '%c'\n", min);
|
||
|
printf("#define B64CMAX '%c'\n", max);
|
||
|
printf("#define B64PADV %u\n", B64PADV);
|
||
|
|
||
|
p = base64rev;
|
||
|
printf("const char base64rev[]=\"");
|
||
|
for (p = base64rev; *p; p++) {
|
||
|
if (*p == '\\')
|
||
|
printf("\\%c", *p);
|
||
|
else
|
||
|
printf("%c", *p);
|
||
|
}
|
||
|
printf("\"\n");
|
||
|
|
||
|
return 0;
|
||
|
}
|