chunked 编码 解码 c算法 yaneng的专栏 博客频道 CSDN.NET

chunked 编码 解码 c算法 - yaneng的专栏 - 博客频道 - CSDN.NET

chunked 编码 解码 c算法

分类: HTTP 574人阅读 评论(0) 收藏 举报

// chunked01.cpp : Defines the entry point for the console application.
//

/***************************************************
*            Revision Log Entry
*    Copyright (C) 2005 YAPCOM Corporation.
*
*            All Rights Reserved.
* File Name    : chunked01.cpp
* Version    : 1.0.0
* Author    : Yap
* Comments    : 解密chunked格式的内容
*
* History:
* Date                Modify By        Comments
* 2007-7-29 0:27:56    Yap                Create...
**************************************************/


#include "stdafx.h"
#include <stdlib.h>
#include <string.h>

//decode && encrypt

/**************************************************
* Function Name    : prechunk
* File Name        : chunked01.cpp
* Return Type    : bool
* Argument        : char * str
* Description    : 解密主函数,原理 首先出现真正内容的个数,然后回车换行(CRLF),接下来是主要内容
现实完规定的个数之后,就又是回车换行(CRLF)。以上就是一个块,块的格式如下

正文个数
CRLF
正文
CRLF
如果文件到结束,会出现
0正文个数显示如下:
0
CRLF
CRLF
//自此文件结束

* Created By    : Yap
*
* History        :
* Date                Modified By         Comment
* 2007-7-29 0:28:14    Yap                    Create...
*************************************************/
char * prechunk(char * str)
{
    //char * str="1a/r/n1234567890dfdfddfweiiouury/r/n1e/r/ndfdfssddffsddffffffdssssssdfex/r/n1d/r/ndfdfssddffsddffffffdssssssdfe/r/n0/r/n/r/n";
    char str1[10],*str2;
    int len = 0,pos = 0,count = 0;

    sscanf(str, "%x", &len);
    sscanf(str, "%s", str1);
    pos+=strlen(str1);
    pos+=2;
    str2= (char *)malloc(len+1);
    memset(str2,0,len+1);
    strncpy(str2,str+pos,len);
    count = len;

    while(1)
    {
        pos+=len;
        pos+=2;
        sscanf(str+pos, "%x", &len);
        sscanf(str+pos, "%s", str1);
        if (len == 0) break;
        count +=len;
        pos+=strlen(str1);
        pos+=2;
        str2 = (char *)realloc(str2,count+1);
        strncat(str2,str+pos,len);
   }
    strset(str,0);
    strcpy(str,str2);
    free (str2);
    return str;
}


int main(int argc, char* argv[])
{
    char * str="1a/r/n1234567890dfdfddfweiiouury/r/n1e/r/ndfdfssddffsddffffffdssssssdfex/r/n1d/r/ndfdfssddffsddffffffdssssssdfe/r/n0/r/n/r/n";
    char *str1=(char*)malloc(strlen(str)+1);
    strcpy(str1,str);

    prechunk(str1);
    printf("%s/n",str);
    printf("%s/n",str1);
}

原文地址:https://www.cnblogs.com/lexus/p/2996330.html