Russian Qt Forum

Qt => Общие вопросы => Тема начата: platerx от Июль 04, 2006, 16:21



Название: Hex2BIn
Отправлено: platerx от Июль 04, 2006, 16:21
Извеняюсь за тупой вопрос, я тлько недавно стал осваивать Qt.
А вопрос такой: как средствами Qt hex в bin. Т.е. есть Qstring, в котором находяться hex данные как из этого сделать QByteArray, в котором буддут те же данные, в бинарном виде.


Название: Hex2BIn
Отправлено: DenKor от Июль 05, 2006, 12:57
Как и обычно посимвольно считываешь строку и делаешь подстановку в QByteArray
"0" - 0
...........
"9"-9
"A" - 10
...........
"F" - 15


Название: Hex2BIn
Отправлено: platerx от Июль 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)));

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


Название: Hex2BIn
Отправлено: DmP от Июль 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')

Кажеться так, может где ошибся. =)


Название: Hex2BIn
Отправлено: platerx от Июль 05, 2006, 15:10
2 DmP Спасибо за совет!
Но мне хотелось бы узнать нельзя ли это сдеать "идеалогически правильно", т.е. безо всяких  явных преобразование типов, и т.д.


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


Хочешь, чтоб еще трольтехи за тебя написали процедуру конвертирования?  :D


Название: Hex2BIn
Отправлено: DenKor от Июль 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% идеалогически правильно
 :D


Название: Hex2BIn
Отправлено: platerx от Июль 06, 2006, 13:16
Понятно. Просто я думал, что в Qt есть что-нть готовое.