首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMap<int,QByteArray>返回错误的QByteArray

QMap<int,QByteArray>返回错误的QByteArray
EN

Stack Overflow用户
提问于 2019-05-27 14:56:51
回答 1查看 160关注 0票数 1

我正在使用

代码语言:javascript
复制
QMap < int, QByteArray> RegTable; (Seprate Class Variable)

存储Modbus寄存器地址和从串行端口接收的数据。一切正常,数据从串口读取并正确写入QByteArray。

代码语言:javascript
复制
qDebug() << Modbus->RegTable[RegAddr].toHex(' '); 

打印正确的数据。但是如果想要使用它来写变量,那么总是将相同的值/垃圾存储在这个变量中。

代码语言:javascript
复制
    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 Class变量,我将它用于主类,但总是得到错误的数据或值。

EN

回答 1

Stack Overflow用户

发布于 2019-05-27 15:01:22

使用

代码语言:javascript
复制
unixTimeStamp |= ...;

您一次又一次地写入相同的字节。您需要移动值:

代码语言:javascript
复制
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);

当然,根据字节顺序,可能必须以相反的顺序进行移位。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56321093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档