C语言Base64

#include <stdio.h>

#include <stdlib.h>

#include <stdint.h>

#include <string.h>

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

int base64_encode(const uint8_t *input, size_t length, char **output, size_t *output_length) {

    if (input == NULL || output == NULL || output_length == NULL) {

        return -1; // 错误码:参数无效

    }

   

    *output_length = 4 * ((length + 2) / 3);

    *output = (char*)malloc(*output_length + 1); // 包含终止符

    if (*output == NULL) {

        *output_length = 0;

        return -2; // 错误码:内存不足

    }

   

    size_t i, j;

    for (i = 0, j = 0; i < length; ) {

        uint32_t triple = 0;

        int bytes_remaining = (int)(length - i);

        int pad = 0;

       

        // 读取最多3字节

        triple |= input[i++] << 16;

        if (i < length) triple |= input[i++] << 8;

        if (i < length) triple |= input[i++];

        else pad = (bytes_remaining == 1) ? 2 : 1;

       

        // 生成4个Base64字符

        (*output)[j++] = base64_table[(triple >> 18) & 0x3F];

        (*output)[j++] = base64_table[(triple >> 12) & 0x3F];

        (*output)[j++] = (pad >= 2) ? '=' : base64_table[(triple >> 6) & 0x3F];

        (*output)[j++] = (pad >= 1) ? '=' : base64_table[triple & 0x3F];

    }

   

    (*output)[*output_length] = '\0'; // 终止符

    return 0; // 成功

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值