[英]QMap<int,QByteArray> return Wrong QByteArray
我在用
QMap < int, QByteArray> RegTable; (Seprate Class Variable)
存储Modbus寄存器地址和从串行端口接收的数据。 一切正常,从串行端口读取数据并正确填充到QByteArray。
qDebug() << Modbus->RegTable[RegAddr].toHex(' ');
打印正确的数据。 但是,如果要使用它编写变量,则始终将相同的值/垃圾存储在该变量中。
unsigned int unixTimeStamp = 0;
qDebug() << Modbus->RegTable[RegAddr].toHex(' ');
unixTimeStamp = static_cast <unsigned int>Modbus->RegTable[RegAddr].at(4);
unixTimeStamp |= static_cast <unsigned int>Modbus->RegTable[RegAddr].at(5)<<8;
unixTimeStamp |= static_cast <unsigned int>Modbus->RegTable[RegAddr].at(6)<<16;
unixTimeStamp |= static_cast <unsigned int>Modbus->RegTable[RegAddr].at(7)<<24;
QDateTime timestamp;
timestamp.setTime_t(unixTimeStamp );
qDebug() << timestamp.toString(Qt::SystemLocaleShortDate); //wrong time
RegTable是Modbus类变量,并且我将其用于主类,但始终会得到错误的数据或值。
同
unixTimeStamp |= ...;
您一遍又一遍地写入同一字节。 您需要移动值:
unixTimeStamp = static_cast <unsigned int>Modbus->RegTable[RegAddr].at(4) << 24;
unixTimeStamp |= static_cast <unsigned int>Modbus->RegTable[RegAddr].at(5) << 16;
unixTimeStamp |= static_cast <unsigned int>Modbus->RegTable[RegAddr].at(6) << 8;
unixTimeStamp |= static_cast <unsigned int>Modbus->RegTable[RegAddr].at(7);
当然,根据字节顺序,移位可能必须以相反的顺序进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.