Base 64 Encoding 编码

本文介绍了Base64编码在SMTP协议中处理二进制数据的重要性,展示了如何通过Base64编码将非文本格式的图片转换为文本格式,以及提供了一个简单的Base64编码函数示例。
摘要由CSDN通过智能技术生成

Base 64 Encoding有什么用?举个简单的例子,你使用SMTP协议 (Simple Mail Transfer Protocol 简单邮件传输协议)来发送邮件。因为这个协议是基于文本的协议,所以如果邮件中包含一幅图片,我们知道图片的存储格式是二进制数据(binary data),而非文本格式,我们必须将二进制的数据编码成文本格式,这时候Base 64 Encoding就派上用场了。

一、编码原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、相关代码

/*
用于将二进制数据进行Base64编码。它接受一个输入字节数组(in)和输入长度(inLen),
并将编码后的结果存储到输出字符串(out)中。

可参考:https://kb.cnblogs.com/page/166471/
*/
extern int base64_encode(const unsigned char *in, int inLen, char *out)
{
    //编码表,用于将输入数据进行编码
	static const char *ENC = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	char *original_out = out;     //保存了输出字符串的起始地址,用于计算编码后的字符串长度
	while (inLen) {
		// first 6 bits of char 1
		*out++ = ENC[*in >> 2];    //将输入字节的前6位进行编码,并将编码后的字符存储到输出字符串中
		if (!--inLen) {             //检查是否只剩下一个输入字节
			// last 2 bits of char 1, 4 bits of 0  
              //输入字节的后2位和下一个输入字节的前4位进行编码,并将编码后的字符存储到输出字符串中。    
			*out++ = ENC[(*in & 0x3) << 4];        
			*out++ = '=';
			*out++ = '=';
			break;
		}
		// last 2 bits of char 1, first 4 bits of char 2
        //将输入字节的后4位和下一个输入字节的前2位进行编码,并将编码后的字符存储到输出字符串中。
		*out++ = ENC[((*in & 0x3) << 4) | (*(in + 1) >> 4)];
		in++;
		if (!--inLen) {
			// last 4 bits of char 2, 2 bits of 0
            //将输入字节的后4位和下一个输入字节的前2位进行编码,并将编码后的字符存储到输出字符串中
			*out++ = ENC[(*in & 0xF) << 2];
			*out++ = '=';
			break;
		}
		// last 4 bits of char 2, first 2 bits of char 3
		*out++ = ENC[((*in & 0xF) << 2) | (*(in + 1) >> 6)];
		in++;
		// last 6 bits of char 3
        //将输入字节的后6位进行编码,并将编码后的字符存储到输出字符串中
		*out++ = ENC[*in & 0x3F];
		in++, inLen--;
	}

	return (out - original_out);
}


  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值