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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* base64_encode(const char *src);
int main(int argc , char *argv[])
{
const char in[] = "levin";
char *res = base64_encode(in);
printf("%s\n" , res);
free(res);
return 0;
}
char* base64_encode(const char *src){
char* dest;
char in[4];
long buf = 0 , tmp = 0;
int i = 0 , j = 0 , count = 0;
char table[] = {
'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G'
, 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N'
, 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U'
, 'V' , 'W' , 'X' , 'Y' , 'Z' , 'a' , 'b'
, 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i'
, 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p'
, 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w'
, 'x' , 'y' , 'z' , '0' , '1' , '2' , '3'
, '4' , '5' , '6' , '7' , '8' , '9' , '+'
, '/' , '='
};
count = strlen(src) / 3 + (strlen(src) % 3 == 0 ? 0 : 1);
dest = (char*)malloc(count * 4 + 1);
for( ; j < count ; j++){
bzero(in , sizeof(in));
strncpy(in , src + j * 3 , 3 );
buf = 0 , buf = 0 , i = 0;
for(; i < strlen(in) ; i++){
tmp = (long)in[i];
tmp <<= (16 - i * 8);
buf |= tmp;
}
for(i = 0; i < 4 ; i ++){
if(strlen(in) + 1 > i){
tmp = buf >> (18 - i * 6);
tmp &= 0x3F;
dest[j * 4 + i] = table[tmp];
}else{
dest[j * 4 + i] = '=';
}
}
}
return dest;
} |
Recent Comments