LINUX.ORG.RU

Qt: перевод из хекса в строку


0

1
void UDPSender::on_hexToSend_textEdited(const QString &arg1)
{
    byteArray->clear();
    *byteArray = ui->hexToSend->text().toAscii();

    ui->hexToSend->setText(ui->hexToSend->text().toUpper());
    ui->stringToSend->setText(QByteArray::fromHex(*byteArray));

}

есть LineEdit в нем хексовая комбинация типа FFFFFF00FFFFFFFF. ноль «терминатор» не дает полностью перевести хекс в строку

Ответ на: комментарий от anonymous

не знаю то тебе не нравится все работает как нужно, за исключением 00

preepunk
() автор топика
$ cat main.cpp  
#include <QtCore>
 
int main(int argc, char* argv[]) {
    QString hex = QString("FFFFFF00FFFFFFFF");
    qDebug() << QByteArray::fromHex(hex.toAscii()).toHex();
    return 0;
}
$ ./qmv 
"ffffff00ffffffff"

Все на месте, как ты можешь заметить.

ui->stringToSend

Вот это совсем лишнее.

rival ★★
()
Ответ на: комментарий от rival

чем эти лишнее? gui виждет содержащий в себе еще кучу виждетов внутри себя? ничего не на месте. объясняю нагляднее:

61626364 - HEX пропуская через мои код abcd - строка

теперь

616263640061626364 пропуская через мои код abcd - строка, хотя надо что нибудь вроде abcd.abcd или другой знак вместо терминатора

preepunk
() автор топика
Ответ на: комментарий от preepunk

> 616263640061626364 пропуская через мои код abcd - строка, хотя надо что нибудь вроде abcd.abcd или другой знак вместо терминатора

Ну так замени «00» на что-нибудь другое, прежде чем fromHex вызывать, либо замени '\0' на что-нибудь уже в bytearray'е, прежде чем в строку переводить.

rival ★★
()
Ответ на: комментарий от preepunk

если я заменю 00 точкой то в обратном преобразовании тока будет прочитана неправильно и хекс станет неверным

preepunk
() автор топика
Ответ на: комментарий от preepunk

> чем например 255 символов и все могут быть использованы

Среди 255 ascii символов полно непечатных, и ты все равно хочешь показывать строку, в которой могут использоваться такие символы, в каком-то QLineEdit'е?
Ты явно что-то делаешь не так, и твоя проблема вовсе не в '\0'.

Отправляй как есть, с нулем, прямо QByteArray, тем более что QUdpSocket::writeDatagram принимает как раз QByteArray, а не QString.
В stringToSend отображай же строку с экранированными нулями и прочими непечатными символами (ba.replace('\0', «\\0») и т.д., лучше даже регекспом), раз уж так хочется поглядеть на отправляемые данные.

rival ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.