Base64编解码的C语言实现

本文介绍了Base64编码的原理,通过3个8位字节转化为4个6位字节,并用特定字符表进行编码。以'A'编码为例,详细解释了编码过程。随后提供了C语言的实现代码,包括编码和解码功能,代码已在MacOS 10.10.2上编译运行通过。
摘要由CSDN通过智能技术生成

Base64编码说明

先简单的说明一下Base64的编码算法。Base64编码要求将3个8位字节(3*8=24)的数据转化为4个6位字节(4*6=24)的数据,之后在6位的前面填补两个0。

当然需要编码的数据也有可能不足3的倍数。那么余下不足3个字节的部分编码时,仍然是编码成4个字节。不足的部分则会使用到’=’来进行填补。

编码出来的数据对应的十进制值范围是0-63。Base64定义了一个表,将这些值和字符做了一一对应。表格如下:

Base64 编码表

Base64编码举例

以”A”编码举例,’A’的ASCII为65,二进制为01000001:

首先从高位到低位取6位字节010000,并填补0为00010000。十进制即16,查表对应的字符是’Q’。

取剩余两位,其余填补0为00010000。十进制也是16,查表对应的字符是’Q’。

剩余两位没有数据可取。则置为’=’。

最终”A”使用Base64编码出来的结果是”QQ==”

C语言的实现

知道了原理,实现起来就比较容易了。对于解码刚好是编码的逆过程。这里就不再赘述了。代码如下:

/* base64.c */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define safe_free(it) if(it) {free(it); it = NULL;}

static char b64_to_ascii(char str) 
{
    if (str >= 0 && str <= 25) {
        return str + 65;
    } else if (str >= 26 && str <= 51) {
        return str + 71;
    } else if (str >= 52 && str <= 61) {
        return str - 4;
    } else if (str == 62) {
        return '+';
    } else {
        return '/';
    }
}

static char ascii_to_b64(char str) 
{
    if (str >= 65 && str <= 90) {
        return str - 65;
    } else if (str >= 97 && str <= 122) {
        return str - 71;
    } else if (str >= 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值