У меня есть приложение 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;
}
Это зависит от того, как оно было отправлено. Вы должны быть уверены в форматировании с обеих сторон, прежде чем сможете правильно общаться.
Передача строки сложна, поэтому лучше всего отправить длину строки (в виде 32-разрядного unsinged int), а затем данные (в формате utf8), и когда вы прочтете, вы можете сделать
char* s;
int length;
in.readData(s, length);
QString str = QString::fromUtf8(s, length);
delete[] s;//free the allocated buffer
QDataStream использует собственный формат сериализации/десериализации. Похоже, что ваши данные не сериализованы с использованием QDataStream. Чтобы решить проблему, вы можете отправлять данные в json/xml/etc.
QDataStream
определенно использует свой собственный простой формат для сложных типов данных Qt. Для простых типов, таких как числовые типы, в этом нет ничего особенного: вы выбираете порядковый номер и готовы к работе.