gpt4 book ai didi

c++ - QMap 返回错误的 QByteArray

转载 作者:行者123 更新时间:2023-11-30 04:47:20 25 4
gpt4 key购买 nike

我正在使用

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);

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

关于c++ - QMap<int,QByteArray> 返回错误的 QByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56321093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com