📄 base64_table.c
字号:
#include <stdio.h>
#include <string.h>
typedef unsigned char U08;
U08 base64_map[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
U08 base64_decode_map[16*8] ={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255, 62,255,255,255, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,255,255,255,255,255,255,//'=' = 0x3D
255, 0, 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,255,255,255,255,255,
255, 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,255,255,255,255,255,
// 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
// 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
// 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
// 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
// 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
// 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
// 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
// 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
};
void encode(U08 *src, int src_len, U08 *dst);
void decode(U08 *src, int src_len, U08 *dst);
void encode(U08 *src, int src_len, U08 *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(U08 *src, int src_len, U08 *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] == base64_map[j])
{
src[i] = j;
break;
}
}
*/
//************************************************************
//******查表法************************************************
for (i=0;i<src_len;i++)
src[i] = base64_decode_map[src[i]];
//************************************************************
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[] ={0x00,0x89,0x31,0x00,0x80,0x5f,0x72,0xd1,0x37,0x55,0xfa,0x55,0xa4,0x83,0xb3,0xd1,0xe7,0x76,0x97,0x92,0xb5,0x2e,0xfd,0xdf,0xa6,0xbc,0x04,0xdc,0xbe,0x3c,0xb7,0x8d,0x1a,0xc5,0x0e,0x72,0x60,0x24,0x24,0xb6,0xdc,0xd5,0xee,0xf0,0x27,0x18,0x9b,0xa7,0x62,0x6a,0x36,0x77,0x29,0xc5,0x63,0xf1,0x26,0x7a,0xe4,0xc2,0xcf,0xd3,0xc5,0x45,0xd5,0x6f,0xed,0x6a,0x46,0xc4,0x3a,0x67,0x42,0x0d,0x6d,0xca,0xfa,0x13,0xb5,0x2c,0x7c,0x55,0x86,0x69,0x35,0xa3,0x46,0x60,0x17,0x2d,0xe3,0x7f,0xb8,0x77,0x61,0x76,0x55,0x29,0x76,0xd7,0xd2,0x89,0x83,0x81,0x87,0x5e,0x5d,0xc8,0x06,0xda,0xe9,0x2e,0xa1,0x5f,0x57,0x41,0xca,0xc2,0xa9,0x4e,0xd0,0x6e,0x24,0xe1,0x24,0x49,0x0a,0x06,0x2a,0x18,0x53,0x1e,0x68,0x11,0x22,0x33,0x44};
U08 src2[1024];
U08 dst2[1024];
int i;
int Base64_len;
int src_len;
//******确定编码前后字符串长度*********************************
src_len = sizeof(src1); //需要编码的字符串长度
// if (src_len%3 != 0)
// Base64_len = (src_len/3 +1)*4;
// else
// Base64_len = (src_len/3)*4;
Base64_len = (src_len/3+((src_len%3)>0?1:0))*4;
//**************************************************************
printf("0x%02x\n",'A'); // '=' = 0x3D
printf("src_len = %d,Base64_len = %d\n",src_len,Base64_len);
encode(src1,src_len,dst1); //Base64编码
for (i=0; i<Base64_len; i++)
{
printf("dst1[%d] = %02X ",i,dst1[i]);
if((i+1)%5 == 0)
printf("\n");
}
printf("\n");
for (i=0 ;i<Base64_len; i++)
src2[i] = dst1 [i];
decode(src2,Base64_len,dst2); //Base64解
for(i=0; i<src_len; i++)
printf("0x%02X ",dst2[i]);
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -