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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Hex2BIn  (Прочитано 5456 раз)
platerx
Гость
« : Июль 04, 2006, 16:21 »

Извеняюсь за тупой вопрос, я тлько недавно стал осваивать Qt.
А вопрос такой: как средствами Qt hex в bin. Т.е. есть Qstring, в котором находяться hex данные как из этого сделать QByteArray, в котором буддут те же данные, в бинарном виде.
Записан
DenKor
Гость
« Ответ #1 : Июль 05, 2006, 12:57 »

Как и обычно посимвольно считываешь строку и делаешь подстановку в QByteArray
"0" - 0
...........
"9"-9
"A" - 10
...........
"F" - 15
Записан
platerx
Гость
« Ответ #2 : Июль 05, 2006, 13:50 »

Я немонго не то имею в виду:
Например есть строка "41424344" из неё надо получить "ABCD", те 41->A, 42->B и т.д.
Сейчас я делаю так:
Код:

for(int i=0;i<hex->size();i+=2)
        bin->append((QChar)((hex->mid(i,2)).toUShort(&ok,16)));

Но мне кажется это корявым.
Записан
DmP
Гость
« Ответ #3 : Июль 05, 2006, 14:34 »

Цитата: "platerx"
Я немонго не то имею в виду:
Например есть строка "41424344" из неё надо получить "ABCD", те 41->A, 42->B и т.д.
Сейчас я делаю так:
Код:

for(int i=0;i<hex->size();i+=2)
        bin->append((QChar)((hex->mid(i,2)).toUShort(&ok,16)));

Но мне кажется это корявым.


Так понимаю, если нужно что бы быстро работало, то:
1) bin.resize(hex.size()/2)
2) Получаешь указатели (char*)bin.data(), (const QChar*)hex.constData()
3) Далее перебираешь соответственно оба указателя, преобразуя данные выше указанным способом - *ptr2 = (*(ptr1+1)-'0') * 16 + (*ptr1-'0')

Кажеться так, может где ошибся. =)
Записан
platerx
Гость
« Ответ #4 : Июль 05, 2006, 15:10 »

2 DmP Спасибо за совет!
Но мне хотелось бы узнать нельзя ли это сдеать "идеалогически правильно", т.е. безо всяких  явных преобразование типов, и т.д.
Записан
DmP
Гость
« Ответ #5 : Июль 05, 2006, 16:07 »

Цитата: "platerx"
2 DmP Спасибо за совет!
Но мне хотелось бы узнать нельзя ли это сдеать "идеалогически правильно", т.е. безо всяких  явных преобразование типов, и т.д.


Хочешь, чтоб еще трольтехи за тебя написали процедуру конвертирования?  Веселый
Записан
DenKor
Гость
« Ответ #6 : Июль 05, 2006, 20:10 »

Цитата: "platerx"
Я немонго не то имею в виду:
Например есть строка "41424344" из неё надо получить "ABCD", те 41->A, 42->B и т.д.
Сейчас я делаю так:
Код:

for(int i=0;i<hex->size();i+=2)
        bin->append((QChar)((hex->mid(i,2)).toUShort(&ok,16)));

Но мне кажется это корявым.


Фраза насчте идеалогии...  :shock:

Самый простой способ это табличный способ.
mas[0xff]={}, где для каждого возможного элемента (их 255), содержимое элемента его буквенный символ.

Смотри например реализацию QTextCodec, можешь даже для этого случая свою кодировку описать - это 100% идеалогически правильно
 Веселый
Записан
platerx
Гость
« Ответ #7 : Июль 06, 2006, 13:16 »

Понятно. Просто я думал, что в Qt есть что-нть готовое.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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