方法有点笨,有好方法望指教
此处接收的数据为mavlink协议数据,接收到的数据先转换为QString类型,mavlink数据按字节发送接收,故两个字符为一组,单个先转成整形,再转字符,再通过移位设定 高四位 低四位
QByteArray Res = serialPort->read(100); //从缓冲区读取数据
QString buffer = Res.toHex(); //以十六进制显示
uint8_t ibuf1;
uint8_t ibuf2;
uint8_t uRes1;
uint8_t uRes2;
uint8_t uRes[100];
for (int i = 0; i < buffer.size(); i+=2)
{
ibuf1=buffer.mid(i,1).toInt(0,16);//按16进制方式转整形
if(ibuf1<10)
{
uRes1 = ibuf1 + '0' - 48;
}else{
uRes1 = ibuf1 - 10 + 'a' - 87;
}
ibuf2=buffer.mid(i+1,1).toInt(0,16);
if(ibuf2<10)
{
uRes2 = ibuf2 + '0' - 48;
}else{
uRes2 = ibuf2 - 10 + 'a' - 87;
}
uRes[i] = uRes2 + (uRes1<<4);
qDebug("i=%d %02x %02x %02x %d %d",i,uRes[i],uRes1,uRes2,ibuf1,ibuf2);
}