c语言自实现base64编码
·
一、示例代码
//Include Start
#include <stdio.h>
#include <stdlib.h>
//Include End
//Define Start
const char base64Map[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; //base64编码映射集
//Define End
//Function Define Start
char* base64_encode(char* src,int len); //进行base64编码,编码后接收指针内存记得释放
//Function Define End
int main()
{
char* s = NULL;
s = base64_encode("1",1);
printf("%s\r\n",s);
return 0;
}
char* base64_encode(char* src,int len)
{
char* dest = NULL; // 目标字符串指针
dest = (char*)malloc(sizeof(char)*((len/3+1)*4+1));// 计算目标字符串长度,并分配内存
int lastCnt = len%3;
int i=0;
int destPos=0;
int index = 0; //计算的编码对应下标
//将前边能够被3整除的部分进行编码
for(i=0;i<(len-lastCnt);i+=3)
{
index = ((src[i] & 0xFC) >> 2); // 取前6位,右移2位,得到编码对应下标
dest[destPos++] = base64Map[index]; // 取对应编码字符,存入目标字符串
index = (((src[i] & 0x03) << 4) | ((src[i+1] & 0xF0) >> 4)); // 取第一字节后2位和第二字节前4位,进行组合,得到编码对应下标
dest[destPos++] = base64Map[index]; // 取对应编码字符,存入目标字符串
index = (((src[i+1] & 0x0F) << 2) | ((src[i+2] & 0xC0) >> 6)); // 取第二字节后4位和第三字节前2位,进行组合,得到编码对应下标
dest[destPos++] = base64Map[index]; // 取对应编码字符,存入目标字符串
index = (src[i+2] & 0x3F); // 取第三字节后6位,得到编码对应下标
dest[destPos++] = base64Map[index]; // 取对应编码字符,存入目标字符串
}
//将最后一部分进行编码
if(lastCnt == 1)
{
index = ((src[len-1] & 0xFC) >> 2); // 取前6位,右移2位,得到编码对应下标
dest[destPos++] = base64Map[index]; // 取对应编码字符,存入目标字符串
index = ((src[len-1] & 0x03) << 4); // 取最后一字节后2位,右移4位,得到编码对应下标
dest[destPos++] = base64Map[index]; // 取对应编码字符,存入目标字符串
dest[destPos++] = '='; // 补齐最后一位
dest[destPos++] = '='; // 补齐最后一位
}
else if(lastCnt == 2)
{
index = ((src[len-2] & 0xFC) >> 2); // 取前6位,右移2位,得到编码对应下标
dest[destPos++] = base64Map[index]; // 取对应编码字符,存入目标字符串
index = (((src[len-2] & 0x03) << 4) | ((src[len-1] & 0xF0) >> 4)); // 取第二字节后4位和第三字节前2位,进行组合,得到编码对应下标
dest[destPos++] = base64Map[index]; // 取对应编码字符,存入目标字符串
index = ((src[len-1] & 0x0F) << 2); // 取最后一字节后4位,右移2位,得到编码对应下标
dest[destPos++] = base64Map[index]; // 取对应编码字符,存入目标字符串
dest[destPos++] = '='; // 补齐最后一位
}
dest[destPos] = '\0'; // 字符串结束符
return dest;
}
更多推荐


所有评论(0)