在網(wǎng)絡(luò)數(shù)據(jù)流接收為QByteArray時(shí),這里假設(shè)為QByteArray data;一般在數(shù)據(jù)包里有數(shù)據(jù)包的長(zhǎng)度,這里假設(shè)這個(gè)長(zhǎng)度是兩個(gè)字節(jié),當(dāng)我們從data取出這兩個(gè)字節(jié)時(shí)仍為QByteArray;我是這樣獲取的:
QByteArray twoBytes=data.mid(開始下標(biāo),2);
然后我調(diào)用toInt,結(jié)果返回都是0;
調(diào)試設(shè)置斷點(diǎn)查看twoBytes的值,大小是2,值是不可見的亂碼,twoBytes[0]=0x05; twoBytes[1]=0xa8;這里假設(shè)長(zhǎng)度是1448,即系十六進(jìn)制0x05a8。最后查看了toInt的說明文檔和里面的例子才知道,05a8在QByteArray里占了四字節(jié)時(shí)才可以正確轉(zhuǎn)換,即系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變?yōu)?span lang=EN-US>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
最后在網(wǎng)上查了一下,找到了文章,雖然代碼不正確,但有了思路就好弄了。
思路就是從twoBytes從一個(gè)字節(jié)一個(gè)字節(jié)的左取到右然后在rtp_length中由高到低放置,大概實(shí)現(xiàn)如下:(可以封裝成函數(shù) 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;