#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; // 成功
}