base64编解码源码适用于c和c++

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

背景

网上找了一些源码,实用时都有点问题(也可能是我没用对),于是自己参考了一份源码改写了。

直接提供最简洁的源码,删减了一堆编译宏,需要使用者自己实现移植编译。

.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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值