inline quint8 Char2Hex(char c)
{
if ('0'<=c && c<='9') return c-'0';
if ('a'<=c && c<='f') return c-'a'+10;
if ('A'<=c && c<='F') return c-'A'+10;
return -1;
}
bool Hex2Raw(quint8 *pData, const char *szMsg, int nMsgLen)
{
int hi, lo;
for (int i=0;i<nMsgLen/2;i++)
{
hi=Char2Hex(szMsg[i*2]);
lo=Char2Hex(szMsg[i*2+1]);
if (hi<0 || lo<0) return false;
pData[i]=(hi<<4)+lo;
}
return true;
}