Dragon  
Dragon
日历
<2020年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
统计
  • 随笔 - 58
  • 文章 - 0
  • 评论 - 55
  • 引用 - 0

导航

常用链接

留言簿(3)

随笔分类(58)

随笔档案(58)

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

在网络数据流接收为QByteArray时,这里假设为QByteArray data;一般在数据包里有数据包的长度,这里假设这个长度是两个字节,当我们从data取出这两个字节时仍为QByteArray;我是这样获取的:

QByteArray twoBytes=data.mid(开始下标,2);

然后我调用toInt,结果返回都是0

调试设置断点查看twoBytes的值,大小是2,值是不可见的乱码,twoBytes[0]=0x05; twoBytes[1]=0xa8;这里假设长度是1448,即系十六进制0x05a8。最后查看了toInt的说明文档和里面的例子才知道,05a8QByteArray里占了四字节时才可以正确转换,即系0x30,0x35,0x61,0x38

 

QByteArray str("05a8");//0x30,0x35,0x61,0x38

bool ok;

int hex=str.toInt(&ok,16); //hex==1448,ok==true

int dec=str.toInt(&ok,10); //dec==0,ok==false,because in dec no a

 

如果想要返回ok为真,可以把a变为0

QByteArray str("0508");//0x30,0x35,0x30,0x38

bool ok;

int hex=str.toInt(&ok,16); //hex==1288,ok==true

int dec=str.toInt(&ok,10); //dec==508,ok==true

 

最后在网上查了一下,找到了文章,虽然代码不正确,但有了思路就好弄了。

思路就是从twoBytes从一个字节一个字节的左取到右然后在rtp_length中由高到低放置,大概实现如下:(可以封装成函数 int BytesToInt(QByteArray towBytes)

for (int i=0;i<twoBytes.length();i++)

{

    rtp_length |=(twoBytes[i] & 0x000000FF);

    rtp_length=rtp_length << 8;

}

rtp_length=rtp_length>>8;

posted on 2010-09-19 17:16 Dragon 阅读(6173) 评论(0)  编辑 收藏 引用 所属分类: QT

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © Dragon Powered by: 博客园 模板提供:沪江博客