@JeyCry

Как преобразовать QString в массив байтов?

Появилась необходимость переписать один проект с C# на С++. Проект представляет собой лаунчер для онлайн игры.
Необходимо установить соединение с сервером и передать ему массив байтов. Сложность возникла на данном участке
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>


Мне необходимо получить имя пользователя из поля loginEdit в GUI и сформировать из него QByteArray. Пробовал сделать это так:
QByteArray login = QByteArray::fromStdString(ui->loginEdit->text().toStdString());


После этого login содержит строку с именем пользователя, а мне необходимо сформировать массив байтов. Прошу помощи в решении данного вопроса. В какую сторону копать?
  • Вопрос задан
  • 3578 просмотров
Решения вопроса 1
@developerxyz
У QByteArray есть метод data(), возвращающий char* на данные массива.
char * QByteArray::data();
const char * QByteArray::data() const;


Конвертация QString в 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();


Обратно получить QString из char* можно, зная исходную кодировку.
char *data = /* получите вашу строку */;
QString result = QString::fromUtf8(data);
/*
QString::fromUtf8() создаст QString в кодировке UTF-8.
QString::fromLatin1() создаст QString в кодировке Latin-1 (CP819).
QString::fromLocal8bit() создаст QString в стандартной системной однобайтной кодировке.
                         В русской Windows обычно это кодировка Windows-1251.
*/


Надеюсь, что мой ответ Вам помог.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы