Dragon |
|
|||
Dragon |
日歷
統計
導航常用鏈接留言簿(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的說明文檔和里面的例子才知道,05a8在QByteArray里占了四字節時才可以正確轉換,即系0x30,0x35,0x61,0x38。 QByteArray str(" 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;
|
![]() |
|
Copyright © Dragon | Powered by: 博客園 模板提供:滬江博客 |