将16进制数据存入unsigned char 中然后转换为int型,但是unsigned char 中遇到0x00就当成结束符,怎么处理
额可能我说的太不清楚了。如下这是一段接收串口数据的程序,其中其中sBuffer存放接收到的16进制数据,然后将其中的数据用memcpy分段提取处理。问题是如果数据中出现0...
额 可能我说的太不清楚了。如下
这是一段接收串口数据的程序,其中其中sBuffer存放接收到的16进制数据,然后将其中的数据用memcpy分段提取处理。问题是如果数据中出现0x00,则之后的数据就会出错,与实际不符
如数据55 01 00 10 12 8f 则00之后的数据就有问题了
unsigned char sBuffer[1024];
memset(&sBuffer, 0, 1024);
dwRead = ReadFile(hCom, &sBuffer, nToRead, &nHaveRead, &osRead);
if(dwRead)
{
GetOverlappedResult(hCom, &osRead,&nHaveRead,TRUE);
strTem.Format("%d", nHaveRead);
strRead = sBuffer;
char *pRcvData=strRead.GetBuffer();
char indicator;
pAddr = StrChr(pRcvData,0x55);
pAddr += 1;
memcpy(Temp,pAddr,1);
Temp[1] = '\0';
indicator = Temp[0];
switch (indicator)
{
case 0x01: //问题在这里,如果数据有0x00,memcpy后,temp中数据不对
pAddr += 1;
memcpy(Temp,pAddr,2);
Temp[2] = '\0';
unsigned int inttemp;
inttemp=(unsigned int)((Temp[0]<<8)|(Temp[1]));
str.Format("%d",inttemp);
MessageBoxJZJ(str);
break;
case 0x02:
......
}
...
}
...
} 展开
这是一段接收串口数据的程序,其中其中sBuffer存放接收到的16进制数据,然后将其中的数据用memcpy分段提取处理。问题是如果数据中出现0x00,则之后的数据就会出错,与实际不符
如数据55 01 00 10 12 8f 则00之后的数据就有问题了
unsigned char sBuffer[1024];
memset(&sBuffer, 0, 1024);
dwRead = ReadFile(hCom, &sBuffer, nToRead, &nHaveRead, &osRead);
if(dwRead)
{
GetOverlappedResult(hCom, &osRead,&nHaveRead,TRUE);
strTem.Format("%d", nHaveRead);
strRead = sBuffer;
char *pRcvData=strRead.GetBuffer();
char indicator;
pAddr = StrChr(pRcvData,0x55);
pAddr += 1;
memcpy(Temp,pAddr,1);
Temp[1] = '\0';
indicator = Temp[0];
switch (indicator)
{
case 0x01: //问题在这里,如果数据有0x00,memcpy后,temp中数据不对
pAddr += 1;
memcpy(Temp,pAddr,2);
Temp[2] = '\0';
unsigned int inttemp;
inttemp=(unsigned int)((Temp[0]<<8)|(Temp[1]));
str.Format("%d",inttemp);
MessageBoxJZJ(str);
break;
case 0x02:
......
}
...
}
...
} 展开
7个回答
2011-10-08
展开全部
1 unsigned char应该改为 unsigned char数组,否则只能存放一个字符。
2 在unsigned char数组中,0与以'0'存放的,不存在你所说的"遇到0x00就当成结束符"。
3 在转换过程中,需要考虑的是溢出问题。若不考虑溢出问题(要转换的16进制不超过8位),程序相当简单。
2 在unsigned char数组中,0与以'0'存放的,不存在你所说的"遇到0x00就当成结束符"。
3 在转换过程中,需要考虑的是溢出问题。若不考虑溢出问题(要转换的16进制不超过8位),程序相当简单。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我想这很简单啊。
比如
unsigned char X[4]={0x10,0x20,0x33,0x00};
unsigned int Y,Z;
Y=(unsigned int)X[0]*256+X[1];
Z=(unsigned int)X[2]*256+X[3];
估计是你处理方法的问题。
比如
unsigned char X[4]={0x10,0x20,0x33,0x00};
unsigned int Y,Z;
Y=(unsigned int)X[0]*256+X[1];
Z=(unsigned int)X[2]*256+X[3];
估计是你处理方法的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
与strcpy相比,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节。
可能错在别的地方
可能错在别的地方
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会吧,字符数组遇到'\0'才会结束,不是'0'。
是不是你搞错了。
是不是你搞错了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
unsigned char 就是BYTE,看一下BYTE转int
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询