将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:
......
}
...
}
...
}
展开
 我来答
匿名用户
2011-10-08
展开全部
1 unsigned char应该改为 unsigned char数组,否则只能存放一个字符。
2 在unsigned char数组中,0与以'0'存放的,不存在你所说的"遇到0x00就当成结束符"。
3 在转换过程中,需要考虑的是溢出问题。若不考虑溢出问题(要转换的16进制不超过8位),程序相当简单。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ATF144X
2011-10-08 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5344
采纳率:77%
帮助的人:4658万
展开全部
我想这很简单啊。
比如
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];
估计是你处理方法的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xixiyua2
2011-10-10 · TA获得超过102个赞
知道答主
回答量:119
采纳率:0%
帮助的人:105万
展开全部
与strcpy相比,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节。
可能错在别的地方
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冰山珀西
2011-10-08 · TA获得超过3392个赞
知道小有建树答主
回答量:1673
采纳率:0%
帮助的人:447万
展开全部
不会吧,字符数组遇到'\0'才会结束,不是'0'。
是不是你搞错了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
派旺囡5139
2011-10-08 · TA获得超过470个赞
知道答主
回答量:538
采纳率:0%
帮助的人:208万
展开全部
unsigned char 就是BYTE,看一下BYTE转int
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式