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); }
时间: 2024-11-05 13:38:51