简体   繁体   English

Qt QString十六进制值到QByteArray

[英]Qt QString hex value to QByteArray

I have a function which gives data as string and function put it to QByteArray and Socket transfer this array to host. 我有一个函数,它以字符串形式提供数据,并将其放入QByteArray,然后Socket将该数组传输到主机。 When i try 当我尝试

_strdata = "80200000"

this data is hex data. 此数据为十六进制数据。 transferred data should be 0x80200000 on wireshark. Wireshark上传输的数据应为0x80200000。

my tries: 我的尝试:

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

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

OUTPUT: wireshark: malformed packet 输出: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: malformed packet again 输出:wireshark:再次出现格式错误的数据包

when i change data to "80200001" wireshark: 50:14:00:01 当我将数据更改为“ 80200001” wireshark时:50:14:00:01

I need your suggestions, 我需要你的建议

Thank you, Can 谢谢可以

Your toInt() calls are using a base 10 conversion of your text. 您的toInt()调用使用的是以10为基数的文本转换。

You need to use base 16 for the toInt() calls like this: 您需要对toInt()调用使用基数16,如下所示:

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

So the whole code would be: 因此整个代码将是:

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

Edit: As you point out below fixing this does not solve the malformed packet problem. 编辑:正如您在下面指出的那样,这不能解决格式错误的数据包问题。 And your other example that uses Qt to convert from a string containing hex did not work either. 使用Qt从包含十六进制的字符串进行转换的其他示例也不起作用。 I believe the problem is not due to the conversion but is a problem with the packet you are creating. 我相信问题不在于转换,而在于您创建的数据包有问题。 I am not familiar with socket programming to help with this. 我不熟悉套接字编程来提供帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM