base64编解码的类
生活随笔
收集整理的這篇文章主要介紹了
base64编解码的类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#pragma once
#include <string>class ZBase64
{
public:/*編碼DataByte[in]輸入的數據長度,以字節為單位*/std::string Encode(const unsigned char* Data,int DataByte);/*解碼DataByte[in]輸入的數據長度,以字節為單位OutByte[out]輸出的數據長度,以字節為單位,請不要通過返回值計算輸出數據的長度*/std::string Decode(const char* Data,int DataByte,int& OutByte);
};
#include "stdAfx.h"
#include "ZBase64.h"using namespace std;string ZBase64::Encode(const unsigned char* Data,int DataByte)
{//編碼表const char EncodeTable[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//返回值string strEncode;unsigned char Tmp[4]={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;
}string ZBase64::Decode(const char* Data,int DataByte,int& OutByte)
{//解碼表const char DecodeTable[] ={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,62, // '+'0, 0, 0,63, // '/'52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // '0'-'9'0, 0, 0, 0, 0, 0, 0,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, // 'A'-'Z'0, 0, 0, 0, 0, 0,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, // 'a'-'z'};//返回值string strDecode;int nValue;int i= 0;while (i < DataByte){if (*Data != '\r' && *Data!='\n'){nValue = DecodeTable[*Data++] << 18;nValue += DecodeTable[*Data++] << 12;strDecode+=(nValue & 0x00FF0000) >> 16;OutByte++;if (*Data != '='){nValue += DecodeTable[*Data++] << 6;strDecode+=(nValue & 0x0000FF00) >> 8;OutByte++;if (*Data != '='){nValue += DecodeTable[*Data++];strDecode+=nValue & 0x000000FF;OutByte++;}}i += 4;}else// 回車換行,跳過{Data++;i++;}}return strDecode;
}
// tt.cpp : 定義控制臺應用程序的入口點。
//#include "stdafx.h"
#include "ZBase64.h"int _tmain(int argc, _TCHAR* argv[])
{ZBase64 zBase;char sztemp[]="1234567899";std::string en = zBase.Encode((unsigned char *)sztemp,10);char sztemp2[]="MTIzNDU2Nzg5OQ==";int outlen = 0;std::string en2 = zBase.Decode((char *)sztemp2,strlen(sztemp2),outlen);return 0;
}
總結
以上是生活随笔為你收集整理的base64编解码的类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Adler-32校验算法
- 下一篇: 第一次使用OD和IDA动静结合找出软件的