Base64编码的实现(c++) 仅编码部分

//Base64编码:每三个字节将编码为四个字节,每次编码取6bit作为新8bit的后六位,前两位填0 

string ZBase64::Encode(const unsigned char* Data,int DataByte)
{
 //编码表
 const char EncodeTable[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

 //返回值
 string strEncode;

 unsigned char Tmp[3]={0};
 int LineLength=0;

 for(int i=0;i<(int)(DataByte / 3);i++)
 {
        Tmp[1] = *Data++;
        Tmp[2] = *Data++;
        Tmp[3] = *Data++;

        strEncode+= EncodeTable[Tmp[1] >> 2];
        strEncode+= EncodeTable[((Tmp[1] << 4) | (Tmp[2] >> 4)) & 0x3F];
        strEncode+= EncodeTable[((Tmp[2] << 2) | (Tmp[3] >> 6)) & 0x3F];
        strEncode+= EncodeTable[Tmp[3] & 0x3F];
  if(LineLength+=4,LineLength==76) {strEncode+="\r\n";LineLength=0;}
 }

 //对剩余数据进行编码
 int Mod=DataByte % 3;
 if(Mod==1)
 {
        Tmp[1] = *Data++;
        strEncode+= EncodeTable[(Tmp[1] & 0xFC) >> 2];
        strEncode+= EncodeTable[((Tmp[1] & 0x03) << 4)];
        strEncode+= "==";
 }
 else if(Mod==2)
 {
  Tmp[1] = *Data++;
  Tmp[2] = *Data++;
  strEncode+= EncodeTable[(Tmp[1] & 0xFC) >> 2];
  strEncode+= EncodeTable[((Tmp[1] & 0x03) << 4) | ((Tmp[2] & 0xF0) >> 4)];
  strEncode+= EncodeTable[((Tmp[2] & 0x0F) << 2)];
  strEncode+= "=";
 }
 
 return strEncode;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值