// 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);
}
chunked 编码 解码 c算法
最新推荐文章于 2021-03-19 12:07:21 发布