点击(此处)折叠或打开
-
/*
-
* 功能:提取带有指定桢头(fc 00 2b 20)的一段十六进制字符串,替换桢头并存入文件
-
*
-
* 例:
-
* 41 fc 00 2b 20 2e 99 11 0c 09 41 0e 59 a5 41 b1 9f 92 19 83 b5 b6 e9 9e 01 cc a3 1f c0 79 7a 8c 54 15 7e f0 d3 6f c2 ce aa 26 49 3b f6 1d 6e 00
-
* fc 00 2b 20 2b 95 9e 41 89 88 b7 13 5b 2c 07 18 79 c2 33 ab 3c da f0 f1 cc 2d 8e b6 db 5c a3 90 b9 c6 6e de f4 bf 2c 07 65 f9 3b f5 29 c9 00
-
* fc 00 2b 20 2e 93 10 46 e9 ef 7f 3e 51 0e 34 2e a0 08 e9 96 bf f4 fb e6 0a 50 9d dd 34 1c 84 24 d7 1a ee e6 47 10 b8 39 f3 29 3b f3 a9 08 00 fc 00 2b
-
*
-
* 要求:
-
* 2a 00 00 00 2e 99 11 0c 09 41 0e 59 a5 41 b1 9f 92 19 83 b5 b6 e9 9e 01 cc a3 1f c0 79 7a 8c 54 15 7e f0 d3 6f c2 ce aa 26 49 3b f6 1d 6e
-
* 2a 00 00 00 2b 95 9e 41 89 88 b7 13 5b 2c 07 18 79 c2 33 ab 3c da f0 f1 cc 2d 8e b6 db 5c a3 90 b9 c6 6e de f4 bf 2c 07 65 f9 3b f5 29 c9
-
* 2a 00 00 00 2e 93 10 46 e9 ef 7f 3e 51 0e 34 2e a0 08 e9 96 bf f4 fb e6 0a 50 9d dd 34 1c 84 24 d7 1a ee e6 47 10 b8 39 f3 29 3b f3 a9 08
-
*/
-
-
long long j = 0;
-
unsigned char Tempbuf[4096*3];
-
-
void main()
- {
-
//....获取str
-
-
memset(Tempbuf, 0, sizeof(Tempbuf));
-
-
ProcessData(str,len);
-
-
return;
-
}
-
-
void ProcessData(unsigned char *str,int len)
-
{
-
int i = 0;
-
unsigned int msg_length,length;
-
unsigned char *buf = str;
-
-
if(j > 0) //若有存入过剩余数据至Tempbuf
-
{
-
memcpy(&Tempbuf[j],str,len); //则,将本次传入的数据追加到上一次未读取完的数据,长度也变化
-
len += j;
-
memcpy(buf,Tempbuf,len);
-
//buf = Tempbuf; not use like this , the same address,clear one,both clear.
-
}
-
-
for(i = 0;i < len;i++)
-
{
-
if((buf[i] == 0xFC) && (buf[i+1] == 0x00) && (buf[i+2] == 0x2B) && (buf[i+3] == 0x20)) //找到桢头开始的地方<i>
-
{
-
-
msg_length = buf[i+2]; //43 内容长度
-
length = msg_length + 4; //一桢数据长度 含0x00
-
-
if(len - i >= length && buf[i + length - 1] == 0x00) //剩余数据长度大于一桢数据长度,则一桢数据完整
-
{
-
buf[i] = 0x2A;
-
buf[i+1] = 0x00;
-
buf[i+2] = 0x00;
-
buf[i+3] = 0x00;
-
file.Write(&buf[i],length-1); //-0x00 MFC文件操作
-
}else{ //否则记录剩余数据长度<j>,并将剩余数据存入Tempbuf(此情况指:搜索到str尾部时,剩余数据有完整桢头)
-
j = len - i;
-
memset(Tempbuf, 0, sizeof(Tempbuf));
-
memcpy(Tempbuf,&buf[i],j);
-
return;
-
}
-
}else{
-
if(len - i < length) //若找不到完整的桢头,且剩余数据长度小于一桢数据长度(此情况指:搜索到str尾部时,剩余数据桢头不完整)
-
{
-
j = len - i; //记录剩余数据长度<j>,并将剩余数据存入Tempbuf
-
memset(Tempbuf, 0, sizeof(Tempbuf));
-
memcpy(Tempbuf,&buf[i],j);
-
return;
-
}
-
}
-
}
-
-
return;
- }