Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование в HEX [D6, WinXP]


Veles ©   (2005-03-03 09:28:00) 

Имею строку:
0410042D0420041E0424041B041E0422005F0421041F042004100412041A0410
формат - String
необходимо преобразовать ее в HEX
Подскажите КАК ?!
Поясняю: строка представляет собой часть телефонной книги сотового телефона в кодировке UCS2 (Русский) - фамилия - хочу что бы естественно в Delphi тоже все было по русски...


Cosinus   (2005-03-03 11:01:00) [1]


> Veles   (03.03.05 10:53) [10]
Я что то не понял, ни мой вариант, ни вариант Digitman-а не подходят что ли?


> Digitman ©   (03.03.05 10:48) [8]
А-а-а... Я просто не знал, а глядеть лень было. Я хотел написать, что конвертер понадобится, только если кодировка "нестандартная", но решил, что меня за такую формулировку, закидают сапогами.


Veles   (2005-03-03 10:59:00) [2]

Digitman ! Спасибо! Я очень Вам благодарен
Все понял...


Digitman   (2005-03-03 10:58:00) [3]


> Фактически строка является ФАМИЛИЕЙ


признаться, довольно странная у человека фамилия - 'АЭРОПОРТ_СПРАВКА'

)


> нужно что бы пользовтель видел ФАМИЛИЮ


так а нафига тебе HEX-то тогда ?
сразу и пиши в файл строку, полученную, например, вышеприведенным алгоритмом ..


Veles   (2005-03-03 10:53:00) [4]

Поясняю:
Эта строка:
0410042D0420041E0424041B041E0422005F0421041F042004100412041A0410
получена с ком порта телефона путем передачи туда команды AT+CPBR
Фактически строка является ФАМИЛИЕЙ человека - в телефоне русский
в кодировке USC2, соответственно отзыв телефона записывается в текстовый файл, затем в моей программе читается этот файл. Понятно что нужно что бы пользовтель видел ФАМИЛИЮ по русски а не в виде набора цифр. Что собираюсь делать:
сначала Hex2Bin, потом преобразую PChar в PWideChar, а далее WideCharToString.
Но на этапе Hex2Bin заткнулся - ведь я беру из текстового файла, а это СТРОКА !


Digitman   (2005-03-03 10:50:00) [5]


> Erik1 ©   (03.03.05 10:47) [7]


да по барабану как она представлена)

суть одна - в этой белиберде закодирована вышеупомянутая мной фраза


Digitman   (2005-03-03 10:48:00) [6]


> все равно придется писать "конвертер" USC2<>ANSI


нафига ?

USC2 - это тот же Юникод, а Делфи без вопросов преобразует Юникод-строку в Ansi-строку

пример в [5] выаодит строку 'АЭРОФЛОТ ..чего-то там еще, не помню'


Erik1   (2005-03-03 10:47:00) [7]

Так исходная строка представлена в бинарном виде или переведена в стринговое HEX представление?


Cosinus   (2005-03-03 10:41:00) [8]


> Anatoly Podgoretsky ©   (03.03.05 10:27) [4]
Не надо передергивать. Он по моему ясно сказал, что есть Value:string. Он хочет преобразовать его в Hexдля отображения некоторых символов, описываемых этими hex. Если оперировать не паскалевскими терминами, где IntToHex-делает как раз такую строку, как в примере у автора, а определением Hex-как представление числа в шестнадцатиричном формате, то по моему все довольно прозрачно. И вы отлично поняли, что он хотел сказать. Подробное разжевывание, конечно никогда не повредит, но ИМНО здесь это лишнее.
С уважением.

> Автору
Забыл сказать, что, видимо все равно придется писать "конвертер" USC2<>ANSI.


Digitman   (2005-03-03 10:32:00) [9]

и зачем тебе Хекс понадобился - ума не приложу ..
это похоже на удаление гландов на приеме у проктолога)

var
 i,j: Integer;
 s, lo, hi: String;
 ws: WideString;
..  s := '0410042D0420041E0424041B041E0422005F0421041F042004100412041A0410';
 setlength(ws, Length(s) div 4);
 j := 1;
 for i := 1 to Length(ws) do
   begin
     hi := '$' + Copy(s, j, 2);
     lo := '$' + Copy(s, j + 2, 2);
     ws[i] := WideChar(StrToInt(hi) shl 8 + StrToInt(lo));
     Inc(j, 4)
   end;
 showmessage(ws);


Anatoly Podgoretsky   (2005-03-03 10:27:00) [10]

Cosinus ©   (03.03.05 10:01) [3]
Он не то хочет...

Что он хочет не сообщает, запросил же Хекс.


Cosinus   (2005-03-03 10:01:00) [11]


> Anatoly Podgoretsky ©   (03.03.05 09:32) [1]
Он не то хочет...

> Digitman ©   (03.03.05 09:56) [2]
На дисплее как русская фамилия


> Veles   (03.03.05 09:28)  

// Функция перевода (НЕХ-представление числа):string в строку из n-ых символов
// Первый байт становиться первым символом
// Пример: HexToStrN('30313233':string)='0123':string
function HexToStrN(Value:String):string;
Var
 i:byte;
 SLen:word;
 s:string;
 Sd:string;
begin
 SLen:=Length(Value) div 2;
 For i:=1 to SLen do
 begin
   Sd:='$'+copy(Value,i*2-1,2);
   s:=s+Chr(StrToInt(Sd));
 end;
Result:=s;
end;


Digitman   (2005-03-03 09:56:00) [12]

приведи точный вид этого фрагмента тел.книги, так как он выглядит на дисплее сотового ..


Anatoly Podgoretsky   (2005-03-03 09:32:00) [13]

Ничего не надо делать, это уже Хекс строка


Наверх

Титульная страница Поиск, карта сайта Написать письмо