找回密码
 立即注册
收起左侧

谁能帮忙解释下面程序什么意思

7
回复
8148
查看
[复制链接]
累计签到:4 天
连续签到:1 天
来源: 2013-9-30 15:35:40 显示全部楼层 |阅读模式
5Qter豆
qint64 len = socket->bytesAvailable();   
qDebug()<<"len"<<len<<endl;  //运行后60    
QByteArray  ba=socket->readAll();   
m_recvBuf=ba.data();   //此处何意??   
qDebug()<<tr("m_recvBuf:")<<m_recvBuf<<endl;//运行后此处显示Uz   
int realLen =sizeof(m_recvBuf);//获取读到数据的长度,留作数据解析用,判断数据包的类型   
qDebug()<<tr("m_recvBuf:")<<ba.toHex().toUpper()<<endl;//一共60个字节的数据  557A10003500......4F   
if ( realLen > 0 )    {        
procData( realLen );//进行数据解析        
qDebug()<<"realLen"<<realLen<<endl; //运行后此处是4   
}

void MyClient::procData( int len ){   
if ( !m_isPkgHdrRecieved )  //之前定义为false   
        {        m_isPkgHdrRecieved = (m_recvBuf[0] == 0x55 && m_recvBuf[1] == 0x7A)               
                                         || ( (byte)m_recvBuf[0] == 0x35 && (byte) m_recvBuf[1] == 0x00 )               
                                         || ( (byte)m_recvBuf[0] == 0x00 && (byte)m_recvBuf[1] == 0x35 //byt在此何意  为啥都是0 或者1,收到包头的数据是55 7A 10 00 35 00  此处本意是验证包头正确  为什么要byte m_recvbuf?                && (byte)m_recvBuf[2] == 0x00);          
}
        m_isPkgHdrRecieved=false;

    qDebug()<<"m_pkgBuf"<<m_pkgBuf;
//为什么运行后显示0xa0017f8  
//m_pkgBuf = new byte[2048]     
qDebug()<<"m_dataCount"<<m_dataCount; //0   
qDebug()<<"len"<<len<<endl;//4   
memcpy( m_pkgBuf+ m_dataCount , m_recvBuf, len);//??这个函数qt有吗?   
m_dataCount += len;   
qDebug()<<"the next is procvalpkg"<<endl;   
qDebug()<<"m_recvBuf"<<m_recvBuf<<endl;  //Uz   
qDebug()<<"m_dataCount"<<m_dataCount<<endl;//4??   
}

最佳答案

查看完整内容

这个是13年10月29日12时30分10秒吗?如果不是,你这几个数据怎么得到是,是toHex()后得到的吗?把代码贴出来。
回复

使用道具 举报

累计签到:1569 天
连续签到:1 天
2013-9-30 15:35:41 显示全部楼层
liyingju001 发表于 2013-10-1 16:58
我收到的返回帧中有这么几个数据  13  10 29 12 30 10 代表年月日时分秒,说是bcd编码,一共是6个字节, ...

这个是13年10月29日12时30分10秒吗?如果不是,你这几个数据怎么得到是,是toHex()后得到的吗?把代码贴出来。

点评

嗯 搞定了 代码运行后得到返回帧 其中就有年月日时分秒 不过现在这个问题倒是解决了 别的问题又来了 我在头文件中规定了返回真的结构体{包头[6] 时间[6]测量数值[2]}当然用的是英文 我这是为了易读 我解析后 cou  详情 回复 发表于 2013-10-2 15:37
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-9-30 15:37:07 显示全部楼层
靠  再是乱的  这样吧
  1. QByteArray  ba=socket->readAll();
  2.     m_recvBuf=ba.data();//??
复制代码
这样写会是什么效果
应该是返回ba的指针是吧
但是我运行后显示"m_recvBuf:" Uz

点评

发帖的时候用上面的代码按钮来贴代码就不乱了。  发表于 2013-9-30 16:49
回复

使用道具 举报

累计签到:1569 天
连续签到:1 天
2013-9-30 16:48:49 显示全部楼层
liyingju001 发表于 2013-9-30 15:37
靠  再是乱的  这样吧这样写会是什么效果
应该是返回ba的指针是吧
但是我运行后显示"m_recvBuf:" Uz

下面是个例子:

QByteArray ba("Hello world");
char *data = ba.data();
while (*data) {
     cout << "[" << *data << "]" << endl;
     ++data;
}

data()返回一个指向ba中数据的指针。

详细的可以查看QByteArray的帮助文档。

可以用size()来返回字节数,例如:

QByteArray ba("Hello");
int n = ba.size();          // n == 5
ba.data()[0];               // returns 'H'
ba.data()[4];               // returns 'o'
ba.data()[5];               // returns '\0'

点评

我收到的返回帧中有这么几个数据 13 10 29 12 30 10 代表年月日时分秒,说是bcd编码,一共是6个字节,我用什么格式进行存呢?int?qstring?double?还是别的?  详情 回复 发表于 2013-10-1 16:58
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-1 16:58:10 显示全部楼层
yafeilinux 发表于 2013-9-30 16:48
下面是个例子:

QByteArray ba("Hello world");

我收到的返回帧中有这么几个数据  13  10 29 12 30 10 代表年月日时分秒,说是bcd编码,一共是6个字节,我用什么格式进行存呢?int?qstring?double?还是别的?
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-2 15:37:45 显示全部楼层
yafeilinux 发表于 2013-10-2 10:51
这个是13年10月29日12时30分10秒吗?如果不是,你这几个数据怎么得到是,是toHex()后得到的吗?把代码贴 ...

嗯  搞定了 代码
  1. QByteArray  ba=socket->readAll();
  2. m_recvBuf=ba.data();
  3. qDebug()<<tr("m_recvBuf:")<<ba.toHex().toUpper()<<endl;
复制代码
运行后得到返回帧 其中就有年月日时分秒
不过现在这个问题倒是解决了  别的问题又来了  
我在头文件中规定了返回真的结构体{包头[6] 时间[6]测量数值[2]}当然用的是英文 我这是为了易读
我解析后 cout<<time<<value<<mac;
我想写进数据库,前面是cout的,就是具体是怎么写的?这时候我直接在控制台是可以输出的,但是写进数据库不会了  给的教程看了好几遍了  
回复

使用道具 举报

累计签到:1569 天
连续签到:1 天
2013-10-2 16:25:47 显示全部楼层
liyingju001 发表于 2013-10-2 15:37
嗯  搞定了 代码运行后得到返回帧 其中就有年月日时分秒
不过现在这个问题倒是解决了  别的问题又来了  
...

先看下数据库的教程,学会如何创建表格,输入数据什么的。

这个可以直接保存成数值或者QString类型的,如果把数据库那些教程都做过一遍了,我感觉这个问题应该可以搞定吧。
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-2 18:20:41 显示全部楼层
我的数据库中time是时间戳,如2013-08-29 05:24:12;我收到的返回帧其中一段是时间,tohex后举个例子是13 10 01 12  00 01,代表年月日时分秒,请问我在qt中设置一个什么类型的变量来存,string?还是别的?又怎么和数据库的格式对应呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了