Qt QString шестнадцатеричное значение для QByteArray

У меня есть функция, которая дает данные в виде строки, и функция помещает их в QByteArray и Socket передает этот массив на хост. Когда я пытаюсь

_strdata = "80200000"

эти данные являются шестнадцатеричными данными. переданы данные должны быть 0x80200000 на wireshark.

мои попытки:

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

Мне нужны ваши предложения,

Спасибо,
Можно

1

Решение

Ваши вызовы 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, тоже не сработал. Я считаю, что проблема не в преобразовании, а в пакете, который вы создаете. Я не знаком с программированием сокетов, чтобы помочь с этим.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]