modbus协议 报文中高位和低未数据或在一起变成16位整形数
举个例子:
high = 0000000011111111
low = 0000000011111111
(high << 8 ) = 1111111100000000
word = (high << 8) | low --> 1111111111111111
QByteArray arr=response.data();
//3、第一个字节表示后面的数据长度
int len=arr[0];
for (int i=0;i<len/2;i++) //每个数据占两个字节 因此除2
{
unsigned char high=arr[2*i+1];//从下标为1开始 16进制转换为char类型
unsigned char low=arr[2*i+2];//从下标为2开始
quint16 v=(high<<8)|low;
ui->tableWidgetMaster->item(i,1)->setText(QString::number(v));
}
//已经确定要写10个值
for(int i=0;i<10;++i)
{
QString text=ui->tableWidgetMaster->item(i,1)->text();
if(text.isEmpty()) text="0";
quint16 v=text.toUInt();
unsigned char high=v>>8; //高位往右边移动8位 就得到想要的高8位数值大小 转化成十进制
unsigned char low=v;
arr.push_back(high);//放入高位置
arr.push_back(low); //放入低位置
}