代码拉取完成,页面将自动刷新
同步操作将从 枯无穷肉/CanAnalyzer 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "dbcmessagebase.h"
#include "qmath.h"
#include <QDebug>
DbcMessageBase::DbcMessageBase()
{
// this->SingalList = new QList<dbcsingalbase>;
// this->Can = new CanDataBase();
this->IsSend = false;
SendCycle = 0;
}
void DbcMessageBase::SetMoto(bool moto)
{
this->isMoto = moto;
}
void DbcMessageBase::getValue(const unsigned char *data, int len)
{
QString bits;
for(int i=0;i<len;i++)
{
QString str = QString("%1").arg(data[i],8,2,QLatin1Char('0'));
QString str1;
str1.fill('0',str.size());
for(int j = 0;j<str1.length();j++)
str1[j] = str[str1.length()-j-1];
bits += str1;
}
for(int j=0;j<SingalList.size();j++)
{
dbcsingalbase item = SingalList.at(j);
qint32 value = 0;
bool isGetValue = true;
if (isMoto == false)
{
for (int i = 0; i < item.Number; i++)
{
int p = i + item.Start;
if (p >= 0 && p < len * 8)
{
if (bits[i + item.Start] == QLatin1Char('1'))
value += (qint32)qPow(2, i);
}
else
{
isGetValue = false;
break;
}
}
}
else
{
int offset = 0;
for (int i = 0; i < item.Number; i++)
{
int p = i + item.Start;
if ((p % 8 == 0) && (i != 0))
offset -= 16;
p += offset;
if (p >= 0 && p < len * 8)
{
if (bits[p] == QLatin1Char('1'))
value += (qint32)qPow(2, i);
}
else
{
isGetValue = false;
break;
}
}
}
if (item.isSigned)
{
qint32 vv = qPow(2, item.Number);
if (value >= vv / 2) //负数
{
value = value - vv;
}
}
if (isGetValue)
{
// qDebug()<< value;
SingalList[j].Value = value;
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。