C++ VC Base64编解码算法系列二(编码算法)
2007-12-23 21:54
267 查看
void base64_encode(char *out, const void *in_, int inlen)
/* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */
{
const unsigned char *in = (const unsigned char *)in_;
for (; inlen >= 3; inlen -= 3)
{
*out++ = base64digits[in[0] >> 2];
*out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)];
*out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
*out++ = base64digits[in[2] & 0x3f];
in += 3;
}
if (inlen > 0)
{
unsigned char fragment;
*out++ = base64digits[in[0] >> 2];
fragment = (in[0] << 4) & 0x30;
if (inlen > 1) fragment |= in[1] >> 4;
*out++ = base64digits[fragment];
*out++ = (inlen < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c];
*out++ = '=';
}
*out = '/0';
}
/* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */
{
const unsigned char *in = (const unsigned char *)in_;
for (; inlen >= 3; inlen -= 3)
{
*out++ = base64digits[in[0] >> 2];
*out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)];
*out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
*out++ = base64digits[in[2] & 0x3f];
in += 3;
}
if (inlen > 0)
{
unsigned char fragment;
*out++ = base64digits[in[0] >> 2];
fragment = (in[0] << 4) & 0x30;
if (inlen > 1) fragment |= in[1] >> 4;
*out++ = base64digits[fragment];
*out++ = (inlen < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c];
*out++ = '=';
}
*out = '/0';
}
相关文章推荐
- C++ VC Base64编解码算法系列一(基本数据定义)
- C/C++面试之算法系列--整数数组的循环右移
- VC++ 2005 (C++/CLI) 系列Web讲座
- 【C++系列】VC++ Directories editing in Tools>Options has been deprecated解决方法
- VC++ 2005 (C++/CLI) 系列Web讲座
- 算法系列—红黑树(C++实现)
- C++ base64编码和解码算法
- [算法系列之十六]数据压缩之游程编码
- C/C++面试之算法系列--去除数组中的重复数字
- C/C++面试之算法系列--如何实现用更少的空间表示英文字母(a ~ z)构成char A[n]字符串
- 实战c++中的vector系列--对vector<自定义类>使用std::find 和 std::find_if 算法
- C++ 人工智能算法系列一(神经网络算法基础知识)
- 【面向对象语言系列】关于 C++ 算法分析,你需要知道的事
- C++ 自然语言编码详解系列二(字符(串)的内存表示)
- 实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中推断不等于end())、operator[])
- C/C++面试之算法系列
- C++字符串系列1:字符编码基础
- C/C++面试之算法系列--典型的几个链表操作-逆序和重排
- C/C++面试之算法系列--从“整数转换成字符串”看算法的联想
- C/C++面试之算法系列--如何实现用更少的空间表示英文字母(a ~ z)构成char A[n]字符串