MIME之Quoted-Printable编解码

来源:互联网 发布:个体软件过程 编辑:程序博客网 时间:2024/05/18 00:54

先上一个解码的,c++风格的。

void DecodeQuoted(const std::string& v_strSrc, std::string& v_strDst) {    std::string::size_type i = 0;    char pDst[sizeof(int)+1] = {0};    const char* pSrc = v_strSrc.c_str();    while (i < v_strSrc.size()) {        if (strncmp(pSrc+i, "=\r\n", 3) == 0){ // 软回车,跳过            i += 3;        } else {            if (pSrc[i] == '='){ // 是编码字节                sscanf(pSrc+i, "=%02X", (unsigned int*)pDst);                v_strDst.append(pDst);                i += 3;            } else{ // 非编码字节                v_strDst.push_back(pSrc[i]);                i++;            }        }    }}

再上一个编码的,c风格的

int EncodeQuoted(const unsigned char* pSrc, char* pDst, int nSrcLen, int nMaxLineLen){    int nDstLen;        // 输出的字符计数    int nLineLen;       // 输出的行长度计数     nDstLen = 0;    nLineLen = 0;     for (int i = 0; i < nSrcLen; i++, pSrc++)    {        // ASCII 33-60, 62-126原样输出,其余的需编码        if ((*pSrc >= '!') && (*pSrc <= '~') && (*pSrc != '='))        {            *pDst++ = (char)*pSrc;            nDstLen++;            nLineLen++;        }        else        {            sprintf(pDst, "=%02X", *pSrc);            pDst += 3;            nDstLen += 3;            nLineLen += 3;        }         // 输出换行?        if (nLineLen >= nMaxLineLen - 3)        {            sprintf(pDst, "=\r\n");            pDst += 3;            nDstLen += 3;            nLineLen = 0;        }    }     // 输出加个结束符    *pDst = '\0';     return nDstLen;}

相关网址:http://biancheng.dnbcw.info/216/216040.html

0 0
原创粉丝点击