CSerialPort类如何对$de07021124000007*05协议进行解析?
CStringstrTemp;strTemp=m_strPortRXData.Mid(1,2);char*temp1=(char*)((LPCTSTR)strTemp);...
CString strTemp;
strTemp=m_strPortRXData.Mid(1,2);
char *temp1=(char*)((LPCTSTR)strTemp);
char tbuf1[3];
tbuf1[0]=temp1[0];
tbuf1[1]=temp1[1];
tbuf1[2]=0;
m_strXhfgq=atoi(tbuf1);
我写得无法解析16进制数
我的显示是‘ ’ 7 2 11 24 00 00 00 7 但是上面发送的是16进制数 展开
strTemp=m_strPortRXData.Mid(1,2);
char *temp1=(char*)((LPCTSTR)strTemp);
char tbuf1[3];
tbuf1[0]=temp1[0];
tbuf1[1]=temp1[1];
tbuf1[2]=0;
m_strXhfgq=atoi(tbuf1);
我写得无法解析16进制数
我的显示是‘ ’ 7 2 11 24 00 00 00 7 但是上面发送的是16进制数 展开
1个回答
展开全部
atoi函数是把字符串转换成十进制数,
如果要转换十六进制,需要自己写一个小函数,先把十六进制字符转换成半个字节的数:
BYTE CharToHalfHex(BYTE byChar)
{
if ((byChar >= '0') && (byChar <= '9'))
{
return byChar - '0';
}
if ((byChar >= 'A') && (byChar <= 'F'))
{
return byChar - 'A' + 10;
}
if ((byChar >= 'a') && (byChar <= 'f'))
{
return byChar - 'a' + 10;
}
return 0;
}
这个函数可以转换字符串中的一个字符。有了这个函数,就可以把相邻的两个字符转换成一个十六进制数了。
如果要转换十六进制,需要自己写一个小函数,先把十六进制字符转换成半个字节的数:
BYTE CharToHalfHex(BYTE byChar)
{
if ((byChar >= '0') && (byChar <= '9'))
{
return byChar - '0';
}
if ((byChar >= 'A') && (byChar <= 'F'))
{
return byChar - 'A' + 10;
}
if ((byChar >= 'a') && (byChar <= 'f'))
{
return byChar - 'a' + 10;
}
return 0;
}
这个函数可以转换字符串中的一个字符。有了这个函数,就可以把相邻的两个字符转换成一个十六进制数了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询