首页 > 其他分享 >Base64 编码/解码应用

Base64 编码/解码应用

时间:2023-12-27 18:01:11浏览次数:46  
标签:编码 base64 src ++ 解码 Base64 char dst size

static char base64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

int base64_encode(const void *src, size_t src_len, char *dst)
{
	const unsigned char *s = (const unsigned char*)src;
	size_t i = 0;
	size_t len = 0;
	for (; i < src_len; len += 4)
	{
		unsigned c;
		c = s[i++];
		c <<= 8;
		if (i < src_len)
			c += s[i];
		c <<= 8;
		i++;
		if (i < src_len)
			c += s[i];
		i++;
		*dst++ = base64_table[(c >> 18) & 0x3f];
		*dst++ = base64_table[(c >> 12) & 0x3f];
		if (i > (src_len + 1))
			*dst++ = '=';
		else
			*dst++ = base64_table[(c >> 6) & 0x3f];
		if (i > src_len)
			*dst++ = '=';
		else
			*dst++ = base64_table[(c >> 0) & 0x3f];
	}
	*dst = '\0';
	return 0;
}

int pos(unsigned char c)
{
	return (strchr(base64_table, c) - base64_table);
}

void SKIP_SPACE(const char *src, int i, int size)
{
	while (i < size && isspace(*src))
	{
		i++;
		src++;
	}
	if (i == size)
	{
		i = size + 1;
	}
}
int base64_decode(const char *src, size_t size, void *dst)
{
	char b[3];
	size_t i = 0;
	char *dst_base = (char *)dst;
	char *d = dst_base;
	size_t j;
	while (i < size)
	{
		unsigned c = 0;
		size_t mark = 0;
		SKIP_SPACE(src, i, size);
		c += pos(*src++);
		c <<= 6;
		i++;
		SKIP_SPACE(src, i, size);
		c += pos(*src++);
		c <<= 6;
		i++;
		SKIP_SPACE(src, i, size);
		if (*src != '=')
			c += pos(*src++);
		else
		{
			i = size;
			mark = 2;
			c <<= 6;
			goto end;
		}
		c <<= 6;
		i++;
		SKIP_SPACE(src, i, size);
		if (*src != '=')
			c += pos(*src++);
		else
		{
			i = size;
			mark = 1;
			goto end;
		}
		i++;
	end:
		b[0] = (c >> 16) & 0xff;
		b[1] = (c >> 8) & 0xff;
		b[2] = (c >> 0) & 0xff;
		for (j = 0; j < 3 - mark; j++)
			*d++ = b[j];
	}
	if (i != size)
	{
		return -1;
	}
	return (int)(d - dst_base);
}

标签:编码,base64,src,++,解码,Base64,char,dst,size
From: https://blog.51cto.com/fengyuzaitu/9002767

相关文章

  • 表单提交中对于中文数据的编码集设置方法
    其中的中文编码并不是在发送之前就将数据进行编码,而是在请求时进行设置的,不需要手动编码。1、Hutool中importcn.hutool.http.HttpRequest;importcn.hutool.http.HttpUtil;importjava.util.LinkedHashMap;importjava.util.Map;publicstaticvoidmain(String[]args)t......
  • 解决Python项目部署到服务器上的编码问题
    在将Python项目部署到服务器上时,经常会遇到编码问题,例如中文乱码、字符集不匹配等。这些问题可能导致项目无法正常运行或显示正确的内容。本文将介绍如何解决Python项目部署到服务器上的编码问题,以确保项目能够在服务器上正常运行。步骤一:确认编码问题首先,我们需要确认是否存在编码......
  • 磁盘调度算法、虚拟内存、抖动(颠簸)、堆栈访问速度、内存分配、内存交换、编码(ASCII、U
    常见的几种磁盘调度算法:读写一个磁盘块的时间的影响因素有:......
  • SpringBoot的编码方式
     方式1.使用配置文件的方式对字符进行编码1.第一种方式:在配置文件中(properties或者yaml文件中均可)添加:server.servlet.encoding.enable=true但是现如今的许多程序已经弃用了这种写法2.第二种方式:server.servlet.encoding.charset=UTF-8;server.servlet.encoding.force=......
  • 汉字在unicode的编码情况-From http://yedict.com/zsts.htm
    字符集内容字数unicode编码字符显示说明(除非安装更大字库)基本区 分页:  一 二 三 四共20902字4E00-9FA5电脑和手机都能显示基本区补充共90字9FA6-9FFF电脑或安卓5以上的手机能显示一部分扩展A共6582字3400-4DB5电脑和手机都能显示扩展A补充共10......
  • 使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的
    在前面随笔《在Winform应用中增加通用的业务编码规则生成》,我介绍了基于Winform和WPF的一个通用的业务编码规则的管理功能,本篇随笔介绍基于后端WebAPI接口,实现快速的Vue3+ElementPlus前端界面的开发整合,同样是基于代码生成工具实现快速的前端代码的生成处理。1、通用的业务编码规......
  • Base64Captcha 登录验证码
    CaptchaGitHub地址:github.com/dchest/captcha简介:Captcha是一个功能强大的验证码生成库,支持生成图片和音频验证码。它能够生成数字、字母、数字字母组合等各种类型的验证码,并且使用简单方便。Gin-UtilsGitHub地址:github.com/gin-contrib/gin-utils简介:Gin-Utils是一个针......
  • Qt/C++音视频开发61-多屏渲染/一个解码渲染到多个窗口/画面实时同步
    一、前言多屏渲染就是一个解码线程对应多个渲染界面,通过addrender这种方式添加多个绘制窗体,我们经常可以在展会或者卖电视机的地方可以看到很多电视播放的同一个画面,原理应该类似,一个地方负责打开解码播放,将画面同步传输到多个显示的地方,完全保证了画面的一致性。这样相当于复用......
  • 关于密码哈希算法BCrypt的编码结果各部分意义分析及其他注意事项
    找到一个英文的解析:Thebcryptstandardmakesstoringsaltseasy-everythingitneedstocheckapasswordisstoredintheoutputstring.Theprefix"$2a$"or"2y"inahashstringinashadowpasswordfileindicatesthathashstringisabcr......
  • win10 dos命令窗口输出中文乱码(将黑窗口改成UTF-8编码)
    1.情景展示在开发过程中,我们通常使用UTF-8编码。然鹅,操作系统默认字符集是GBK,这导致在黑窗口下出现的中文,以乱码的形式展现。如何解决?2.具体分析如何查看命令窗口的字符集?方式一win+r-->输入:cmd,打开黑窗口。运行:chcp,按回车键,可以得到:936,936对应的就是简体中文,也是windo......