Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как преобразовать IP адрес в число

Delphi , Интернет и Сети , TCP/IP

Как преобразовать IP адрес в число

MS в обстановке секретности готовит ответ фирме mirabilis и ее знаменитому продукту ICQ. Рабочее название новой MS-разработки - IFuQ.

Функция, представленная в этом примере может быть и не очень элегантна, зато работает. Функция получает в качестве параметра строку, содержащую IP адрес, и возвращает строку с IP адресом в виде DWord значения. Результат легко можно проверить командой "Ping".

Обратите внимание, что необходимо добавить "Math" в "Uses" для функции "IntPower";


function IP2HEX(OrgIP:string):string;
var
  // Сохраняем оригинальное значение IP адреса
  OrgVal: string;
  // части оригинального IP
  O1,O2,O3,O4: string;
  // шестнадцатиричные части
  H1,H2,H3,H4: string;
  // Здесь будут собраны все шестнадцатиричные части
  HexIP: string;
  XN: array[1..8] of Extended;
  Flt1: Extended;
  Xc: Integer;
begin

  // Сохраняем в обратном порядке для простого случая
  Xn[8]:=IntPower(16,0);Xn[7]:=IntPower(16,1); Xn[6]:=IntPower(16,2);Xn[5]:=IntPower(16,3);
  Xn[4]:=IntPower(16,4);Xn[3]:=IntPower(16,5); Xn[2]:=IntPower(16,6);Xn[1]:=IntPower(16,7);

  // Сохраняем оригинальный IP адрес
  OrgVal:=OrgIP;
  O1:=Copy(OrgVal,1,Pos('.',OrgVal)-1);Delete(OrgVal,1,Pos('.',OrgVal));
  O2:=Copy(OrgVal,1,Pos('.',OrgVal)-1);Delete(OrgVal,1,Pos('.',OrgVal));
  O3:=Copy(OrgVal,1,Pos('.',OrgVal)-1);Delete(OrgVal,1,Pos('.',OrgVal));
  O4:=OrgVal;

  H1:=IntToHex(StrToInt(O1),2);H2:=IntToHex(StrToInt(O2),2);
  H3:=IntToHex(StrToInt(O3),2);H4:=IntToHex(StrToInt(O4),2);

  // Получаем шестнадцатиричное значение IP адреса
  HexIP:=H1+H2+H3+H4;

  // Преобразуем это большое шестнадцатиричное значение в переменную Float
  Flt1:=0;

  for Xc:=1 to 8 do
  begin
    case HexIP[Xc] of
      '0'..'9': Flt1:=Flt1+(StrToInt(HexIP[XC])*Xn[Xc]);
      'A': Flt1:=Flt1+(10*Xn[Xc]);
      'B': Flt1:=Flt1+(11*Xn[Xc]);
      'C': Flt1:=Flt1+(12*Xn[Xc]);
      'D': Flt1:=Flt1+(13*Xn[Xc]);
      'E': Flt1:=Flt1+(14*Xn[Xc]);
      'F': Flt1:=Flt1+(15*Xn[Xc]);
    end;
  end;
  Result:=FloatToStr(Flt1);
end;

Перевод контента на русский язык:

Функция Delphi для преобразования IP-адреса в значение в формате HEX!

Код интересен, и я постараюсь подробно объяснить, как он работает.

Обзор функции Функция IP2HEX принимает строковый параметр OrgIP, который представляет собой IP-адрес в виде десятичной записи (например, "192.168.1.100"). Функция возвращает строку, содержащую IP-адрес в формате HEX (в формате DWord).

Анализ кода Вот шаг за шагом анализ кода: 1. Инициализация: Функция инициализирует несколько переменных: * OrgVal: копия оригинального IP-адреса строки. * O1, O2, O3 и O4: временные строки для хранения каждой части IP-адреса (октетов). * H1, H2, H3 и H4: строковые значения HEX, представляющие собой октеты. * HexIP: строка для хранения финального значения HEX IP-адреса. * XN: массив из 8 extended значений, которые будут использоваться для некоторых математических операций позднее. * Flt1: вещественное значение, которое будет использовано для хранения результата. * Xc: целочисленная переменная, используемая как счетчик цикла. 2. Парсинг IP-адреса: Код извлекает каждую часть IP-адреса из оригинальной строки IP-адреса с помощью функций Copy и Delete. 3. Преобразование в HEX: Каждая часть IP-адреса преобразуется в строку HEX с помощью функции IntToHex. Это создает H1, H2, H3 и H4. 4. Соединение значений HEX: Код конкатенирует четыре строки HEX для создания финальной строки HexIP. 5. Математические операции: Функция использует цикл для перебора каждого символа строки HexIP. Для каждого символа функция проверяет, является ли он цифрой (0-9), и умножает соответствующее extended значение в массиве XN на эту цифру. Если символ является буквой (A-F), она конвертируется в ее десятичное эквивалентное значение (10-15) и выполняется та же операция умножения. 6. Расчет результата: Функция суммирует все умноженные значения и хранит результат в переменной Flt1. 7. Возвращение результата: Наконец, функция конвертирует значение Flt1 в строку с помощью функции FloatToStr и возвращает ее как результат.

Альтернативное решение Хотя этот код работает, есть некоторые способы улучшить его эффективность или читаемость:

  • Вместо использования массива extended значений (XN) для математических операций можно использовать простой цикл с счетчиком.
  • Вы можете упростить преобразование HEX, используя встроенную функцию Delphi Hex (например, H1 := Hex(StrToInt(O1), 2);).
  • Если вы хотите избежать использования вещественных значений, можно хранить результат как целочисленное значение или строка из HEX-значений. В целом, этот код quite clever в своей подходе, и я надеюсь, что мои комментарии помогли объяснить, как он работает!

Функция IP2HEX преобразует строку, содержащую IP-адрес, в строку с числом в виде DWord значения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TCP/IP ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:21:05/0.005817174911499/1