gpt4 book ai didi

c++ - Qt QString 十六进制值到 QByteArray

转载 作者:行者123 更新时间:2023-11-30 04:13:43 26 4
gpt4 key购买 nike

我有一个函数,它以字符串形式提供数据,函数将它放入 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() 调用使用 base 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 从包含十六进制的字符串转换的另一个示例也不起作用。我相信问题不是由于转换引起的,而是您正在创建的数据包的问题。我不熟悉套接字编程来帮助解决这个问题。

关于c++ - Qt QString 十六进制值到 QByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19271942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com