C语言Base64

#include

#include

#include

#include

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

}

你可能感兴趣的:(c语言,stm32)