Тема: HEX данные
Показать сообщение отдельно
  #11  
Старый 26.11.2011, 01:11
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

Действительно шедевр....
Распечатай и повесь в сортире.
================================================
Итак, обратная задача- из строки сделать integer
Самое умное- использоваь то что изобрели до тебя.
См. функцию HexToBin в справке
Вот пример ее использования.
Код:
var
Buf:array[0..15] of byte;

HexToBin('ff', @Buf[2], 1); //засылает результат во 2 байт буфера
Здесь функция преобразует строковое HEX-представление в число
и пишет в буфер.
Единственный ее недостаток- непонятно как она это делает.
Поэтому привожу свой код (только как иллюстрация)

Код:
function HexToStr(s:string):longword;
var
i:integer;
begin
s:='0'+Trim(s);
Result:=0;i:=1;
    for i:=1 to length(s) do
        case s[i] of
        '0'..'9':Result:=Result*16 + ord(s[i])-48;
        'A'..'F':Result:=Result*16 + ord(s[i])-55;
        'a'..'f':Result:=Result*16 + ord(s[i])-87;
        end    //case
end;
Здесь понятен принцип. Если символ находится от '0' до '9'
то от его порядкового номера вычитается 48.
Это потому что символ '0' занимает 48-ю клетку в таблице кодировки
а ему соответствует численное значение 0.
и символы '0'..'9' расположены подряд.
Аналогично и с символами 'a'..'f'
Вот и вся механика.
Ответить с цитированием