Как заменить элементы ByteArray на модифицированные в шестнадцатеричном формате символы ASCII? - PullRequest
0 голосов
/ 13 февраля 2020

У меня проблема с функциями QByteArray. Мое намерение состоит в том, чтобы написать функцию, которая будет редактировать QByteArray, то есть: Input: функция «1W34567» добавляет 0x80 ко 2-му символу - W. Она должна заменить W (0x57 в ASCII) на × (0xD7 в ASCII). Я пытаюсь решить эту проблему с помощью следующей функции:

void MainWindow::msgModify(QByteArray& ba)
{
    QByteArray t1,t2;
    t1 = ba.toHex();
    int b1 = t1.mid(2,2).toInt(&OK, 16);
    b1+=0x80;
    t2 = QByteArray::number(b1);
    t2 = t2.toHex();
    qDebug() << t1; //Here output is "31573334353637" - correct
    t1 = QByteArray::fromHex(t1);
    qDebug() << t1; //I check if it will give me orginal msg, output is "1W34567" - correct
    qDebug() << b1; //215 decimal - it's correct 
    qDebug() << t2; //"323135" I expect the symbol which has index 215 decimal in ASCII table but I 
                    //got this - why? 
} 

1 Ответ

0 голосов
/ 14 февраля 2020

ОК, я решил свою проблему:

void MainWindow::msgModify(QByteArray& ba)
   {
    QByteArray hexBa = ba.toHex();
    int t = hexBa.mid(2,2).toInt(&OK,16) + 0x80;
    QByteArray c;
    hexBa.replace(2,2, c.setNum(t,16));
    ba = QByteArray::fromHex(hexBa);

   }

Я хотел, чтобы эта функция изменяла только 2-й символ, добавляя 0x80 в шестнадцатеричном формате, ie. Входные данные: ascii: "123456" -> hex: 3132333435 Выходные данные: ascii: "1²3456" -> hex: 31B2333435

Конечно, консоль будет кодировать его как "1 \ xB2", "3456", но это не так. Как выяснилось, в моем случае наиболее важен шестнадцатеричный формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...