2013-10-09 80 views
1

我有一個函數,它提供數據作爲字符串和函數把它放到QByteArray和Socket將這個數組傳遞給主機。當我嘗試Qt QString十六進制值到QByteArray

_strdata = "80200000" 

這個數據是十六進制數據。在wireshark上轉移數據應該是0x80200000。

我嘗試:

void DataTransmitter(const QString & _strdata) 
{ 
    QByteArray myData = QByteArray::fromHex(_strdata.toLatin1()); 

    PUDPSocket->writeDatagram(myData.data(), myData.size(), host, port); 
} 

OUTPUT:Wireshark的:畸形報文

void DataTransmitter(const QString & _strdata) 
{ 
    QString d1,d2,d3,d4; 
    d1.append(_strdata[0]);d1.append(_strdata[1]); 
    d2.append(_strdata[2]);d2.append(_strdata[3]); 
    d3.append(_strdata[4]);d3.append(_strdata[5]); 
    d4.append(_strdata[6]);d4.append(_strdata[7]); 

    QByteArray data; 
    data.append((char) d1.toInt()); 
    data.append((char) d2.toInt()); 
    data.append((char) d3.toInt()); 
    data.append((char) d4.toInt()); 

    PUDPSocket->writeDatagram(data.data(),data.size(),host,port); 
    d1.clear(); 
    d2.clear(); 
    d3.clear(); 
    d4.clear(); 
} 

OUTPUT:Wireshark的:畸形報文再次

當我改變數據

「80200001」 Wireshark的:50 :14:00:01

我需要你的建議,

謝謝 能

回答

2

你toInt()調用使用文本的基礎10位的轉換。

您需要使用基地16的toInt()調用是這樣的:

bool bOk; 
d1.toInt(&bOk,16); 

所以整個代碼將是:

void DataTransmitter(const QString & _strdata) 
{ 
    QString d1,d2,d3,d4; 
    d1.append(_strdata[0]);d1.append(_strdata[1]); 
    d2.append(_strdata[2]);d2.append(_strdata[3]); 
    d3.append(_strdata[4]);d3.append(_strdata[5]); 
    d4.append(_strdata[6]);d4.append(_strdata[7]); 

    bool bOK; 
    QByteArray data; 
    data.append((char) d1.toInt(&bOK,16)); 
    data.append((char) d2.toInt(&bOK,16)); 
    data.append((char) d3.toInt(&bOK,16)); 
    data.append((char) d4.toInt(&bOK,16)); 

    PUDPSocket->writeDatagram(data.data(),data.size(),host,port); 
    d1.clear(); 
    d2.clear(); 
    d3.clear(); 
    d4.clear(); 
} 

編輯:正如你所指出的下方固定這樣做沒有解決畸形的數據包問題。而你的另一個使用Qt從包含hex的字符串轉換的例子也不起作用。我相信這個問題不是由於轉換造成的,而是您正在創建的數據包的問題。我不熟悉套接字編程來幫助解決這個問題。

+0

嘗試了您的代碼,它發送數據時,其80200001。但當我嘗試發送80200000 wireshark說畸形的數據包。 – mcan

+0

QByteArray應該處理數據流中的'\ 0'。 wireshark會顯示格式錯誤的數據包包含的數據嗎? – drescherjm

+0

wireshark輸出:Internet協議版本4,Src: 192.168.0.202(192.168.0.202),Dst:192.168.0.80(192.168.0.80)用戶數據報協議,Src端口:hpvmmagent(1125),Dst端口:danf-ak2( 1041) [格式錯誤的數據包:TFTP]專家信息(錯誤/格式錯誤):格式錯誤的數據包(發生例外)消息:格式錯誤的數據包(發生例外)嚴重性級別:錯誤組:格式錯誤 – mcan