J
J
JeyCry2018-07-30 15:03:47
Qt
JeyCry, 2018-07-30 15:03:47

How to convert QString to byte array?

There was a need to rewrite one project from C # to C ++. The project is a launcher for an online game.
You need to establish a connection with the server and pass it an array of bytes. Difficulty arose in this area

byte[] b = new byte[31] { 0x1F, 0x00, 0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
<b>byte[] Login = Encoding.ASCII.GetBytes(TLogin);</b>

I need to get the username from the loginEdit field in the GUI and form a QByteArray from it. Tried doing it like this:
QByteArray login = QByteArray::fromStdString(ui->loginEdit->text().toStdString());

After that, login contains a string with the username, and I need to form an array of bytes. I ask for help in resolving this issue. In which direction to dig?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
developerxyz, 2018-08-31
@JeyCry

QByteArray has a data() method that returns a char* on the array data.

char * QByteArray::data();
const char * QByteArray::data() const;

Convert QString to char*:
QString login_str = /*ваш код для получения строки*/ ui->loginEdit->text();
QByteArray login_ba = login_str.toUtf8();
/*
QString::toUtf8() вернет QByteArray в кодировке UTF-8.
QString::toLatin1() вернет QByteArray в кодировке Latin-1 (CP819).
                    Предупреждение: если строка содержит символы, которые не доступны в
                    кодировке Latin-1, результат функции неизвестен. Эти символы могут
                    быть заменены на '?' или исключены из результата.
QString::toLocal8bit() вернет QByteArray в стандартной системной однобайтной кодировке.
                       В русской Windows обычно это кодировка Windows-1251.
                       Предупреждение: если строка содержит символы, которые не доступны в
                       текущей кодировке, результат функции неизвестен. Эти символы могут
                       быть заменены или исключены из результата.
*/
char *login_ptr = login_ba.data();

You can get QString back from char* knowing the original encoding.
char *data = /* получите вашу строку */;
QString result = QString::fromUtf8(data);
/*
QString::fromUtf8() создаст QString в кодировке UTF-8.
QString::fromLatin1() создаст QString в кодировке Latin-1 (CP819).
QString::fromLocal8bit() создаст QString в стандартной системной однобайтной кодировке.
                         В русской Windows обычно это кодировка Windows-1251.
*/

Hope my answer helped you.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question