chunked编码格式的解码程序

本文介绍了一种名为Chunked的编码方式,它将数据分成多个块进行传输。文章详细解释了Chunked编码的数据格式,并提供了一个C语言实现的例子,用于演示如何从文件中读取Chunked编码的数据并将其转换为常规数据。
摘要由CSDN通过智能技术生成

chunked 编码是把一段文本分解为多个小块,分别是由块大小和块数据组成。块大小是一个十六进制的数据加上回车换行符结束,块数据最后也是由回车和换行符结束。

具体数据的格式是:十六进制的块大小+回车+换行+数据块+回车+换行

最后一个是块大小为零表示结束了。最后的结尾一般是:0\r\n\r\n

 1 #include <stdio.h>
 2 #include <math.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 int NumberToDecimal(const char* number,int base)  //十六进制转为十进制.程序未加入防错处理。
 6 {
 7     int Decimal=0;
 8     int Length=0;
 9     int Exponent=0;
10     int power=0;
11     Length=strlen(number);
12     power=Length;
13     int i;
14     for(i=0;i<Length;i++){
15         int atom=0;
16         if(number[i]>='0'&&number[i]<='9')
17             atom=number[i]-'0';
18         else if(number[i]>='A'&&number[i]<='F')
19             atom=number[i]-'A'+10;
20         else if(number[i]>='a'&&number[i]<='f')
21             atom=number[i]-'a'+10;
22         else 
23             break;
24         Decimal=Decimal+atom*pow(base,power-i-1);
25     }
26     printf("source number is:%s\t Decimal is :%d\n",number,Decimal);
27     return Decimal;
28 }
 1 ///
 2 //
 3 //解码chunked
 4 //
 5 //
 6 ////
 7 
 8 bool decode_chunked(const char* FileNameFrom,const char* FileNameTo)
 9 {
10     FILE *fpIn=NULL,*fpOut=NULL;
11     
12     //打开输入和输出文件
13     fpIn=fopen(FileNameFrom,"r");
14     if(NULL==fpIn)
15         return false;
16     fpOut=fopen(FileNameTo,"w");
17     if(NULL==fpOut)
18         return false;    
19     //fseek(fpIn,0L,SEEK_END);
20     while(true){
21     char szLength[10]={0};
22     int i;
23     for(i=0;i<10;i++){
24         szLength[i]=fgetc(fpIn);
25         if(szLength[i]=='\n')
26             if(szLength[i-1]=='\r')
27                 break;
28     }    
29     szLength[i-1]=0;
30     puts(szLength);
31     int size=NumberToDecimal(szLength,16);    
32     if(size==0)
33         break;
34     char* pBuffer=NULL;
35     pBuffer=(char*)malloc(size);
36     if(pBuffer==NULL)
37         break;
38     memset(pBuffer,0,size);
39     fread(pBuffer,size,1,fpIn);
40     fwrite(pBuffer,size,1,fpOut);
41     free(pBuffer);
42     fgetc(fpIn);
43     fgetc(fpIn);
44     }
45     //关闭输入和输出文件
46     fclose(fpIn);
47     fclose(fpOut);
48     return true;
49 }

 

转载于:https://www.cnblogs.com/OneL1fe/p/decode_chunked.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值