📄 base64.c
字号:
#include <stdio.h>
#include <string.h>
typedef unsigned char U08;
U08 ch[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
void encode(char *src, int src_len, char *dst);
void decode(char *src, int src_len, char *dst);
void encode(char *src, int src_len, char *dst);
{
int i,j;
for (i = 0, j = 0; i < src_len - src_len % 3; i += 3)
{
dst[j++] = base64_map[(src[i] >> 2) & 0x3F];
dst[j++] = base64_map[((src[i] << 4) & 0x30) + ((src[i + 1] >> 4) & 0xF)];
dst[j++] = base64_map[((src[i + 1] << 2) & 0x3C) + ((src[i + 2] >> 6) & 0x3)];
dst[j++] = base64_map[src[i + 2] & 0x3F];
}
if (src_len % 3 == 1)
{
dst[j++] = base64_map[(src[i] >> 2) & 0x3F];
dst[j++] = base64_map[(src[i] << 4) & 0x30];
dst[j++] = '=';
dst[j++] = '=';
}
else if (src_len % 3 == 2)
{
dst[j++] = base64_map[(src[i] >> 2) & 0x3F];
dst[j++] = base64_map[((src[i] << 4) & 0x30) + ((src[i + 1] >> 4) & 0xF)];
dst[j++] = base64_map[(src[i + 1] << 2) & 0x3C];
dst[j++] = '=';
}
return;
}
void decode(char *src, int src_len, char *dst);
{
int i,j;
if(src_len%4 != 0)return;
for(i=0; i<src_len; i++)
for(j=0; j<64; j++)
{
if(src[i] == ch[j])
{
src[i] = j;
break;
}
}
for(i=0,j=0; i<src_len; i+=4,j+=3)
{
dst[j]=(src[i]<<2) + ((src[i+1]&0x30)>>4);
dst[j+1]=((src[i+1]&0x0F)<<4) + ((src[i+2]&0x3C)>>2);
dst[j+2]=((src[i+2]&0x03)<<6) + src[i+3];
}
return;
}
void main()
{
U08 src1[] = {'1','2','3','0','a','b','*','0','A','B','$'};
U08 dst1[1024];
U08 src2[1024];
U08 dst2[1024];
int i;
encode(dst1,src1,strlen(src1)); //Base64编码
printf("%d \n%s\n",strlen(src1),dst1);
for ( i= 0 ;i<strlen(dst1); i++)
src2[i] = dst1 [i];
decode(dst2,src2,strlen(src2)); //Base64解码
for(i=0; i<sizeof(src1); i++)
printf("%c",dst2[i]);
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -