Russian Qt Forum
Сентябрь 30, 2024, 16:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTextEdit  (Прочитано 6890 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Декабрь 10, 2013, 17:29 »

Вывожу данные через QTextEdit
Код
C++ (Qt)
void MainWindow::getShowData(QByteArray data)
{
txtTraffic->append(data.toHex);
}
 

Подскажите как сделать пробелы между байтами в посылке при выводе???
« Последнее редактирование: Декабрь 10, 2013, 17:31 от demaker » Записан
Bepec
Гость
« Ответ #1 : Декабрь 10, 2013, 17:35 »

Хочешь извращённый костыль? Каждый байт переводить в HEX строку и добавлять к ней нолик если символов не хватает Улыбающийся
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #2 : Декабрь 10, 2013, 17:38 »

Глум Веселый
Записан
Bepec
Гость
« Ответ #3 : Декабрь 10, 2013, 17:52 »

Увы, нет. У меня так делается. Иного способа я не нашёл, разве что мап сделать и через него гонять байты Веселый

PS а для логирования лучше использовать бинарные данные. А строки обычно нужны при отладке и их довольно мало.

Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #4 : Декабрь 10, 2013, 18:35 »

Код
C++ (Qt)
QString MainWindow::dumpFunc(QByteArray ba)
{
   QString strStr;
   QString strHex;
   char strBufStr[4];
   char strBufHex[5];
 
   for(int i = 0; i<ba.length(); i++)
   {
       if(i%8 == 15)
       {
           ::sprintf(strBufHex,"%02X\n",(unsigned char)(ba.at(i)));
 
           if((ba.at(i) != 0 )&& ((unsigned char)(ba.at(i)) < 128))
           {
               ::sprintf(strBufStr,"%c\n",(unsigned char)(ba.at(i)));
           }
           else
           {
               strBufStr[0] = '.';
               strBufStr[1] = '\n';
               strBufStr[2] = 0;
           }
       }
       else if(i%8 == 7)
       {
           ::sprintf(strBufHex,"%02X  ",(unsigned char)(ba.at(i)));
 
           if((ba.at(i) != 0 )&& ((unsigned char)(ba.at(i)) < 128))
           {
               ::sprintf(strBufStr,"%c  ",(unsigned char)(ba.at(i)));
           }
           else
           {
               strBufStr[0] = '.';
               strBufStr[1] = ' ';
               strBufStr[2] = ' ';
               strBufStr[3] = 0;
           }
       }
       else
       {
           ::sprintf(strBufHex,"%02X ",(unsigned char)(ba.at(i)));
 
           if((ba.at(i) != 0 )&& ((unsigned char)(ba.at(i)) < 128))
           {
               ::sprintf(strBufStr,"%c ",(unsigned char)(ba.at(i)));
           }
           else
           {
               strBufStr[0] = '.';
               strBufStr[1] = ' ';
               strBufStr[2] = 0;
           }
       }
 
       strHex.append(strBufHex);
       strStr.append(strBufStr);
   }
   strHex.append(" | ");
   strHex.append(strStr);
   return strHex;
}
 

сделал вот так, шарит Улыбающийся
Записан
Bepec
Гость
« Ответ #5 : Декабрь 10, 2013, 19:20 »

Фигасе простыня... А у меня простой цикл с несколькими строчками. Я так не могу Грустный
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Декабрь 10, 2013, 19:30 »

Код
C++ (Qt)
   if(i%8 == 15)
и что в эту ветку заходит?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #7 : Декабрь 11, 2013, 10:17 »

Код
C++ (Qt)
   if(i%8 == 15)
и что в эту ветку заходит?
Это остаток от деления на 8
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #8 : Декабрь 11, 2013, 10:19 »

Фигасе простыня... А у меня простой цикл с несколькими строчками. Я так не могу Грустный

А заценить можно?
Записан
Majestio
Гость
« Ответ #9 : Декабрь 11, 2013, 10:29 »

Это остаток от деления на 8

Остаток от деления на 8 == 15.
Это не в нашем измерении.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #10 : Декабрь 11, 2013, 11:11 »

Это остаток от деления на 8

Остаток от деления на 8 == 15.
Это не в нашем измерении.

М-да это лишнее, согласен! Улыбающийся
Записан
Bepec
Гость
« Ответ #11 : Декабрь 11, 2013, 14:18 »

Код:
	
        if (tmpArray.size() > 0)
{
QString tmpStr2(tmpArray.toHex());
for (int i = 0; i < tmpStr2.size(); i+=3)
{
tmpStr2.insert(i, " ");
}
ui.plainTextEdit->appendPlainText(tmpStr2.toUpper());
}

Эм.. ну и всё Улыбающийся
Записан
Majestio
Гость
« Ответ #12 : Декабрь 11, 2013, 16:28 »

Ну и я свои пять копеек вставлю ... считаю что инсертить по символу в QString - это не халяльно Улыбающийся
Вот мой вариантик, если в виде функции:

Код
C++ (Qt)
QString dumpFunc(QByteArray Ba)
{
   QString Res("");
   char *T = "0123456789ABCDEF";
   if (int L = Ba.size()) {
       char *W = new char[L*3-1];
       memset(W,32,(L-1)*3); W[L*3-1] = 0;
       for(int i=0,p=0; i<L; i++,p++) {
           *(W+p++) = T[Ba[i] >> 0x4];
           *(W+p++) = T[Ba[i]  & 0xF];
       }
       Res.append(W);
       delete W;
   }
   return Res;
}
 

Хоть и строк чуть-чуть больше, но она будет пошустрее на больших дампах. ИМХО.
Записан
Bepec
Гость
« Ответ #13 : Декабрь 11, 2013, 16:33 »

Не спорю Улыбающийся Но как быстрое решение она подошла почти идеально Улыбающийся

PS кстати интересный вопрос, мапа с соответствием символов будет быстрее вашей ф-ции или нет? Подозреваю что нет, но всё равно спрошу Улыбающийся
Записан
Majestio
Гость
« Ответ #14 : Декабрь 11, 2013, 16:42 »

PS кстати интересный вопрос, мапа с соответствием символов будет быстрее вашей ф-ции или нет? Подозреваю что нет, но всё равно спрошу Улыбающийся

Если все 256 значений вбить, от 00 .. FF? Думаю это ускорит, но крайне незначительно. Основная байда с тормозами, имхо, не в количестве вычислений - а именно с манипуляциями с памятью. Это нужно минимизировать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.282 секунд. Запросов: 23.