首页 > 代码库 > 机内码到Base64的编码转换

机内码到Base64的编码转换

Base64是一种将二进制转为可打印字符的编码方法,主要用于邮件传输。Base64就是将64个字符(A-Z,a-z,0-9,+,/)作为基本字符集,把所有符号转换为这个字符集中的字符。为了将机内码转换为Base64编码,首先建立一个Base64码表(如下图),每次从输入流中取6bit,将此6bit作为下标查找Base64码表,输入对应字符。这样,没3字节机内码被转换为4字节的Base64编码。编码的结果出现最后不满4个字符时用 “=”填充。

              

                                                                            Base64码表

代码如下:

#include<stdio.h>
char table[64]=
{
	'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','+','/'
};
void conv(unsigned char src[],unsigned char des[])
{
	des[0]=src[0]>>2;
	unsigned char tmp=((src[0]&0X03)<<4);
	des[1]=tmp|(src[1]>>4);
	tmp=((src[1]&0X0F)<<2);
	des[2]=tmp|(src[2]>>6);
	des[3]=src[2]&0X3F;
	for(int i=0;i<4;i++)
	{
		des[i]=table[des[i]];
	}
}
void main()
{
	FILE*fp1=fopen("in.txt","rb");
	FILE*fp2=fopen("out.txt","wt");
	unsigned char src[4]={0};
	unsigned char des[5]={0};
	int c;
	while((c=fread(src,sizeof(unsigned char),3,fp1))==3)
	{
		conv(src,des);
		fprintf(fp2,"%s",des);
	}
	if(c==1)
	{
		src[1]=src[2]=0;
		conv(src,des);
		des[2]=des[3]='=';
		fprintf(fp2,"%s",des);
	}
	if(c==2)
	{
		src[2]=0;
		conv(src,des);
		des[3]='=';
		fprintf(fp2,"%s",des);
	}
	fclose(fp1);
	fclose(fp2);
}


机内码到Base64的编码转换