ResponseStream *ParseChunkData(char* pChunkData, int nChunkDataSize) { if (pChunkData == NULL || nChunkDataSize < 2) { return NULL; } //if auto pstream = new ResponseStream; //获取Chunked数据大小 int crlf = 2, block_size = 0; LPSTR pBlockDataBegin = pChunkData, pBlockDataEnd = pChunkData, pDataEnd = pChunkData + nChunkDataSize; while(pBlockDataBegin < pDataEnd) { pBlockDataEnd = strstr(pBlockDataBegin, "\r\n"); if (pBlockDataEnd == NULL) { assert(!"非法Chunk数据!"); return pstream; } pBlockDataEnd[0] = '\0'; block_size = Int32::TryParse(pBlockDataBegin, 16); pBlockDataEnd[0] = '\r'; if (block_size == 0) { break; } //if pstream->Write(pBlockDataEnd + crlf, block_size); pBlockDataBegin = pBlockDataEnd + crlf + block_size; //干掉换行符 crlf = 0; while(*pBlockDataBegin == '\r' || *pBlockDataBegin == '\n') { crlf++; pBlockDataBegin += 1; } } return pstream; }
这里是对Chunked数据的简易处理方法,如果是动态接收网页数据时需要其它处理。