我正在使用
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 timeRegTable是Modbus Class变量,我将它用于主类,但总是得到错误的数据或值。
发布于 2019-05-27 15:01:22
使用
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);当然,根据字节顺序,可能必须以相反的顺序进行移位。
https://stackoverflow.com/questions/56321093
复制相似问题