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

📄 base64.txt

📁 Base64编码方法及例程
💻 TXT
字号:
//==============================================================================
/*
Base64编码方法    xieyi_hc[

Base64编码其实是将3个8位字节转换为4个6位字节,( 3*8 = 4*6 = 24 ) 这4个六位字节 
其实仍然是8位,只不过高两位被设置为0. 当一个字节只有6位有效时,它的取值空间为0 
到 2的6次方减1 即63,也就是说被转换的Base64编码的每一个编码的取值空间为(0~63) 
事实上,0~63之间的ASCII码有许多不可见字符,所以应该再做一个映射,映射表为 
‘A‘ ~ ‘Z‘ ? ASCII(0 ~ 25) 
‘a’ ~ ‘z‘ ? ASCII(26 ~ 51) 
‘0’ ~ ‘9‘ ? ASCII(52 ~ 61) 
‘+‘ ? ASCII(62) 
‘/‘ ? ASCII(63) 
这样就可以将3个8位字节,转换为4个可见字符。 
具体的字节拆分方法为:(图(画得不好,领会精神 :-)) 
aaaaaabb ccccdddd eeffffff 
~~~~~~~~ ~~~~~~~~ ~~~~~~~~ 
字节 1 字节 2 字节 3 
|| 
\/ 
00aaaaaa 00bbcccc 00ddddee 00ffffff 

注:上面的三个字节位原文,下面四个字节为Base64编码,其前两位均为0。 
这样拆分的时候,原文的字节数量应该是3的倍数,当这个条件不能满足时,用全零字节 
补足,转化时Base64编码用=号代替,这就是为什么有些Base64编码以一个或两个等号结 
束的原因,但等号最多有两个,因为:如果F(origin)代表原文的字节数,F(remain)代 
表余数,则 
F(remain) = F(origin) MOD 3 成立。 
所以F(remain)的可能取值为0,1,2. 
如果设 n = [F(origin) – F(remain)] / 3 
当F(remain) = 0 时,恰好转换为4*n个字节的Base64编码。 
当F(remain) = 1 时,由于一个原文字节可以拆分为属于两个Base64编码的字节,为了 
让Base64编码是4的倍数,所以应该为补2个等号。 
当F(remain) = 2 时,由于两个原文字节可以拆分为属于3个Base64编码的字节,同理, 
应该补上一个等号 */

uchar Base64(void)//Base64编码
{//数据经过Base64编码后发出  //用户名:密码 0xff结束,如:czte(用户名):czte(密码)0xff
 //返回值在yonghuming_hc[]中,字节数在b_zz中
   uchar i,j,k=0,l_zz=0,b_zz=0,bz=0,zj=0,zj1,tiwei=2;
   uchar zhongjian[50];//yonghuming_hc[]=//"czte:czte21";
   duyonghuming();
   for(i=0;i<50;++i)
   {
      base64[i]=yonghuming_hc[i];
	  if(yonghuming_hc[i]==0){base64[i]=0xff;break;}
   }
   
   if(base64[l_zz]!=0xff)
   for(i=0;i<60;++i)
   {
        if(base64[l_zz]!=0xff)
        {
           zj1=zj>>2;
		   zj=base64[l_zz]<<(8-tiwei);
           zhongjian[b_zz]=base64[l_zz++]>>tiwei;
		   zhongjian[b_zz++]|=zj1;
		   tiwei+=2;
		   if(tiwei==8)
		   {
		      zj1=zj>>2;
			  zhongjian[b_zz++]=zj1;
			  zj=0;zj1=0;
			  tiwei=2;
		   }
        }
        else
		{
		   i%=3;
		   --b_zz;
		   if(i!=0)
		   {
		      zj1=zj>>2;
			  zhongjian[++b_zz]=zj1;
		   }
		   break;
		}
   }
   for(j=0;j<=b_zz;++j)
   {
      zhongjian[j]=Base64_mb[zhongjian[j]];
   }
   --j;
   if(i==1)
   {
      zhongjian[++j]='=';zhongjian[++j]='=';
   }
   else if(i==2)
   {
      zhongjian[++j]='=';
   }
   b_zz=j;
   for(j=0;j<=b_zz;++j)
   {
      base64[j]=zhongjian[j];
   }
   ++j;
   base64[j]=0xda;
   return(b_zz);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -