背景
网上找了一些源码,实用时都有点问题(也可能是我没用对),于是自己参考了一份源码改写了。
直接提供最简洁的源码,删减了一堆编译宏,需要使用者自己实现移植编译。
.c文件里面有使用例子参考。
源码
my_base64.h
/**
* @file my_base64.h
* @author zhongwei.peng
* @brief Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049.
* 参考了 intel base64 库,参考链接: https://github.com/intel/base64
* @version 0.1
* @date 2023-01-04
*
* @copyright Copyright (c) 2023
*
*/
#ifndef __MY_BASE64_H__
#define __MY_BASE64_H__
/*
标准Base64 = 0
URL中使用 = 1
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,
而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
*/
#define BASE64_USE_URL (1)
// 获取 encode 需要的缓存空间, x 为十六进制数据长度,单位 byte
#define BASE64_ENCODE_BUF_SIZE(x) (((x)+5) / 3 * 4)
/**
* @brief base64 编码
*
* @param in[in] 需要编码的缓存(十六进制)
* @param len[in] 需要编码的字节数
* @param out[out] 编码后输出缓存指针(字符串)
* @param len_out[out] 编码后输出缓存指针(字符串)的长度
*/
void base64_encode(const unsigned char *in, unsigned int len_in, char *out, unsigned int *len_out);
/**
* @brief base64 解码
*
* @param base64_str[in] 需要解码的缓存(字符串)
* @param len[in] 需要解码的字节数
* @param out[out] 解码后输出缓存指针
* @param len_out[out] 解码后输出缓存长度
*/
void base64_decode(const char *base64_str, unsigned int len, unsigned char *out, unsigned int *len_out);
#endif
my_base64.c

该代码提供了简洁的Base64编码和解码函数,适用于标准Base64和URL安全的Base64。源码包括了头文件my_base64.h和实现文件my_base64.c,删除了不必要的编译宏,用户需自行移植编译。附带了测试样例以展示如何使用这两个函数。
最低0.47元/天 解锁文章
5306

被折叠的 条评论
为什么被折叠?



