chunked 編碼 解碼 c演算法 分類: HTTP 2009-07-27 11:17 574人閱讀 評論(0) 收藏 舉報演算法ccomments解密datefile
// 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);
}