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

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

Получить из массива байт строку с HEX-текстом [D7, WinXP]


Maverick ©   (2005-09-14 17:20:00) 

Доброго времени суток, мастера.

есть массив байт типа
var
 Arr: array of byte;

как его преобразовать в строчку с HEX-текстом?


Maverick   (2005-09-14 19:07:00) [1]

да, точно :)
ок, ну наконец то разобрался.

спасибо большое!


begin...end   (2005-09-14 19:03:00) [2]

> Maverick ©   (14.09.05 18:55) [12]

Ну так [9] как раз подходит:

var
 Str, Hex: string;
 L: Integer;
begin
 Hex := '13cea9feed125dd5cc092a';
 L := Length(Hex) div 2;
 SetLength(Str, L);
 HexToBin(PChar(Hex), PChar(Str), L)
end.


Важно, чтобы шестнадцатеричное представление состояло только из символов '0'..'9' и 'a'..'f', т.е., в том числе, не содержало заглавных символов 'A'..'F'. Если оно их содержит, то перед передачей строки в HexToBin всю её надо привести к нижнему регистру (LowerCase).


Maverick   (2005-09-14 18:55:00) [3]

да,именно.

сорри, я уже торможу под вечер.


begin...end   (2005-09-14 18:53:00) [4]

> Maverick ©   (14.09.05 18:50) [10]

Что есть "нормальный стринг"? Нужно перевести строку, содержащую шестнадцатеричные представления кодов символов в строку, содержащую сами эти символы? Или что?


Maverick   (2005-09-14 18:50:00) [5]

> begin...end ©   (14.09.05 18:36) [9]
 реал сенкс :)

и все таки я не понял. у меня есть hex текст (типа 13cea9feed125dd5cc092a)
как преобразовать обрано в нормальный стринг?


begin...end   (2005-09-14 18:36:00) [6]

Сорри, [8] нечаянно отправил. Баловался с новым интерфейсом форума :)

Мой вариант:

var
 A: array of Byte;
 L: Integer;
 S: string;
begin

 // Из A в S

 L := Length(A);
 SetLength(S, 2 * L);
 BinToHex(PChar(A), PChar(S), L);

 // Из S в A

 L := Length(S) div 2;
 SetLength(A, L);
 HexToBin(PChar(S), PChar(A), L);

end.


begin...end   (2005-09-14 18:33:00) [7]


> описание функции HexToBin из модуля Classes.


Германн   (2005-09-14 18:01:00) [8]

2 Maverick ©   (14.09.05 17:49) [5]

> а как обратно?


StrToInt('$'+s);


begin...end   (2005-09-14 17:54:00) [9]

> Maverick ©   (14.09.05 17:49) [5]

См. в справке описание функции HexToBin из модуля Classes.


Maverick   (2005-09-14 17:49:00) [10]

спасибо
и еще вопрос по поводу inttohex..

string можно перевести в hex:
var
 s,ss: string;
for i := 1 to Length(s) do
begin
     ss := ss + IntToHex(Ord(s[i]),2);
end;

а как обратно?

вопросы наверно детские , но что то у меня туго с переводами всегда было :)


begin...end   (2005-09-14 17:48:00) [11]

> Maverick ©   (14.09.05 17:20)

См. в справке описание функции BinToHex из модуля Classes.


SergP.   (2005-09-14 17:35:00) [12]

s:='';
for i:=low(arr) to high(arr) do s:=s+inttohex(arr(i),2);

Вроде бы так


DesWind   (2005-09-14 17:31:00) [13]

IntToHex


Ega23   (2005-09-14 17:26:00) [14]


const
 HEXValues:array[0..255] of String = ('00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0A', '0B', '0C', '0D', '0E', '0F',
   ..............................
 'F0', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'FA', 'FB', 'FC', 'FD', 'FE', 'FF');        
var
i:Integer;
ss:string;
begin
ss:='';
for i:=Low(Arr) to High(Arr) do ss:=ss+HEXValues[Arr[i]];
ShowMessage(ss);
end;


Наверх

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