一、示例代码

//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;
}

更多推荐