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