как получить структуру из QByteArray

0

У меня есть приложение TCP-связи в С# и другое в программе C++ Qt на linux

Но после связи я получаю данные от приложения С# в C++ QByteArray. теперь QByteArray необходимо преобразовать обратно в структуру

Как я могу получить данные в my_struct в QT. я использовал

QDataStream in(&data, QIODevice::ReadOnly);
int parID;
QString parMessage;
in >> parID >>parMessage;

ИЛИ

const my_struct* my_struct = reinterpret_cast<const my_struct* >(data.constData());
// display
qDebug() << " id :"<<my_struct->id<< " msg: "<< my_struct->msg;



struct my_struct
{
  int id;
  string msg;
}
Теги:
qt
qtnetwork

2 ответа

0

Это зависит от того, как оно было отправлено. Вы должны быть уверены в форматировании с обеих сторон, прежде чем сможете правильно общаться.

Передача строки сложна, поэтому лучше всего отправить длину строки (в виде 32-разрядного unsinged int), а затем данные (в формате utf8), и когда вы прочтете, вы можете сделать

char* s;
int length;
in.readData(s, length);
QString str = QString::fromUtf8(s, length);
delete[] s;//free the allocated buffer
0

QDataStream использует собственный формат сериализации/десериализации. Похоже, что ваши данные не сериализованы с использованием QDataStream. Чтобы решить проблему, вы можете отправлять данные в json/xml/etc.

  • 1
    Это не совсем правильно. QDataStream определенно использует свой собственный простой формат для сложных типов данных Qt. Для простых типов, таких как числовые типы, в этом нет ничего особенного: вы выбираете порядковый номер и готовы к работе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню