我是靠谱客的博主 无心乌冬面,最近开发中收集的这篇文章主要介绍C语言base64编解码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 参考网上的代码整理后的base64编解码,纯工具类代码。

static const char *ALPHA_BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
char *base64_encode (unsigned char *data, int size) {
char *d, buf[3];
int i, j, d_len;
if (!data || size <= 0)
return NULL;
d_len = size * 4 + 10;
d = (char *)malloc(d_len);
if (!d)
return NULL;
memset(d, 0, d_len);
for (i = 0, j = 0; i < size; ) {
buf[0] = data[i++];
buf[1] = i < size ? data[i++] : '';
buf[2] = i < size ? data[i++] : '';
d[j++] = ALPHA_BASE64[(buf[0] >> 2) & 0x3F];
d[j++] = ALPHA_BASE64[((buf[0] << 4) | ((buf[1] & 0xFF) >> 4)) & 0x3F];
d[j++] = ALPHA_BASE64[((buf[1] << 2) | ((buf[2] & 0xFF) >> 6)) & 0x3F];
d[j++] = ALPHA_BASE64[buf[2] & 0x3F];
}
switch (size % 3) {
case 1: d[--j] = '=';
case 2: d[--j] = '=';
}
return d;
}
unsigned char *base64_decode (const char *s, int *size) {
int i, j, s_len, size2;
int to_int[128] = {-1};
char buf[4] = {0};
unsigned char *data;
if (!s || *s == 0)
return NULL;
s_len = strlen(s);
size2 = s_len + 10;
data = (unsigned char *)malloc(size2);
if (!data)
return NULL;
for (i = 0; i < 64; i++)
to_int[ALPHA_BASE64[i]] = i;
memset(data, 0, size2);
for (i = 0, j = 0; i < s_len; i += 4) {
buf[0] = to_int[s[i]];
buf[1] = to_int[s[i + 1]];
data[j++] = (((buf[0] << 2) | (buf[1] >> 4)) & 0xff);
buf[2] = to_int[s[i + 2]];
data[j++] = (((buf[1] << 4) | (buf[2] >> 2)) & 0xff);
buf[3] = to_int[s[i + 3]];
data[j++] = (((buf[2] << 6) | buf[3]) & 0xff);
}
if (size) *size = size2;
return data;
}

最后

以上就是无心乌冬面为你收集整理的C语言base64编解码的全部内容,希望文章能够帮你解决C语言base64编解码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部