VC串口通信数据提取处理问题
串口收到数据01030C1DC209C403E8019000320000B215,其中1DC2是我需要提取出来的数据,1DC2转换成十进制就是我要的,要怎么去实现啊。。接...
串口收到数据01 03 0C 1D C2 09 C4 03 E8 01 90 00 32 00 00 B2 15,其中1D C2是我需要提取出来的数据,1DC2转换成十进制就是我要的,要怎么去实现啊。。接收到数据的变量时Cstring类型的,我认为应该设置一个byte类型的数组把cstring类型数据存在里面。可是我不知道要怎么转换 求指导
展开
1个回答
展开全部
首先你需要定位数据位置,这个需要根据你的实际情况,比如在03 0C之后,那么根据查找这个标记确认数据位置,这个需要实际逻辑,帮不到你什么。
其次你需要将2位数据提取出来,方法很多,比如CString的Mid函数,或者直接GetBuffer之后对进行char *的操作。
无论怎样,得到一个char *后,通过sscanf或者strtol进行转换就可以。以strtol为例(注:如果是UNICODE模式,用wcstol)
CString str = strGet.Mid(3,2);//从第三位置获取
int i = strtol(str.GetBuffer(),NULL,16);//将16进制字符串转换为整型变量
更多追问追答
追问
我不能这么判断 因为我的串口会受到很多数据 所以我只能把他存在一个数组里 判断数组的某一位是0C的话就取出后面的俩位
追答
int pos = strGet.Find((char)0x0c) + 1;
str = strGet.Mid(pos,2);
这样就取到那两位了。当然,前提是,你的CString是存储的是没有空格那种。如果是空格并直观显示的,需要Find的就是"0C "
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询