![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование в 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]Ничего не надо делать, это уже Хекс строка