⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 base64_table.c

📁 Base64编码的简单C++语言实现...
💻 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 + -