簡體   English   中英

Qt QString十六進制值到QByteArray

[英]Qt QString hex value to QByteArray

我有一個函數,它以字符串形式提供數據,並將其放入QByteArray,然后Socket將該數組傳輸到主機。 當我嘗試

_strdata = "80200000"

此數據為十六進制數據。 Wireshark上傳輸的數據應為0x80200000。

我的嘗試:

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

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

輸出: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();
}

輸出:wireshark:再次出現格式錯誤的數據包

當我將數據更改為“ 80200001” wireshark時:50:14:00:01

我需要你的建議

謝謝可以

您的toInt()調用使用的是以10為基數的文本轉換。

您需要對toInt()調用使用基數16,如下所示:

 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從包含十六進制的字符串進行轉換的其他示例也不起作用。 我相信問題不在於轉換,而在於您創建的數據包有問題。 我不熟悉套接字編程來提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM