base64压缩算法.c

来自「Base64算法的压缩函数」· C语言 代码 · 共 55 行

C
55
字号
unsigned char code EnBase64Tab[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";


int EncodeBase64(const unsigned char* pSrc, char* pDst, int nSrcLen)
{
   xdata unsigned char c1, c2, c3;    // 输入缓冲区读出3个字节
   xdata unsigned int i,nDstLen = 0;             // 输出的字符计数
   xdata unsigned int nLineLen = 0;            // 输出的行长度计数
   xdata unsigned int nDiv = nSrcLen / 3;      // 输入数据长度除以3得到的倍数
   xdata unsigned int nMod = nSrcLen % 3;      // 输入数据长度除以3得到的余数
   pDst=FS;
  // pDst=FS_OP_END;
   pSrc=FS_OP;
    // 每次取3个字节,编码成4个字符
    for (i = 0; i < nDiv; i ++)
    {
        // 取3个字节
        c1 = *pSrc++;
        c2 = *pSrc++;
        c3 = *pSrc++;
 
        // 编码成4个字符
        *pDst++ = EnBase64Tab[c1 >> 2];
        *pDst++ = EnBase64Tab[((c1 << 4) | (c2 >> 4)) & 0x3f];
        *pDst++ = EnBase64Tab[((c2 << 2) | (c3 >> 6)) & 0x3f];
        *pDst++ = EnBase64Tab[c3 & 0x3f];
        nLineLen += 4;
        nDstLen += 4;
    }
 
    // 编码余下的字节
    if (nMod == 1)
    {
        c1 = *pSrc++;
        *pDst++ = EnBase64Tab[(c1 & 0xfc) >> 2];
        *pDst++ = EnBase64Tab[((c1 & 0x03) << 4)];
        *pDst++ = '=';
        *pDst++ = '=';
        nLineLen += 4;
        nDstLen += 4;P10=~P10;
    }
    else if (nMod == 2)
    {
        c1 = *pSrc++;
        c2 = *pSrc++;
        *pDst++ = EnBase64Tab[(c1 & 0xfc) >> 2];
        *pDst++ = EnBase64Tab[((c1 & 0x03) << 4) | ((c2 & 0xf0) >> 4)];
        *pDst++ = EnBase64Tab[((c2 & 0x0f) << 2)];
        *pDst++ = '=';
        nDstLen += 4;
    }
    // 输出加个结束符
    *pDst = '\0';
    return nDstLen;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?