Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Работа с адресами



Вернуться к списку функций
 Преобразование IP-адреса из строки в число с проверкой на валидность

 Прислал: fenik17 ( 4 октября 2011 г. )
©  Николай Федоровских
 Описание:
Преобразует строку IP-адреса вида xxx.xxx.xxx.xxx в 4-байтное число и, одновременно, проверяет строку на валидность.

 Зависимости:
нет

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Преобразование IP-адреса из строки в число с проверкой на валидность

Преобразует строку IP-адреса вида xxx.xxx.xxx.xxx в 4-байтное число и, одновременно, проверяет строку на валидность.

Зависимости: нет
Автор:       fenik17, fenik17@gmail.com
Copyright:   Николай Федоровских
Дата:        4 октября 2011 г.
***************************************************************** }

function StrToIP(const strIP: AnsiString; out uintIP: Longword): boolean;
var
  pCurChar: ^byte;
  prevChar: byte;
  i, dotCount, digitCount: integer;
  x: longword;
begin
  if strIP <> '' then
  begin
    uintIP := 0;
    x := 0;
    dotCount := 0;
    pCurChar := @strIP[1];
    digitCount := 0;
    prevChar := ord('.');
    for i := length(strIP)-1 downto 0 do
    begin
      if (pCurChar^ >= ord('0')) and (pCurChar^ <= ord('9')) then
      begin
        if digitCount = 3 then break;
        x := x*10 + pCurChar^ - ord('0');
        if x > 255 then break;
        if i = 0 then
        begin
          if dotCount <> 3 then break;
          uintIP := uintIP shl 8 + x;
          Result := true;
          exit;
        end;
        inc(digitCount);
      end
      else if pCurChar^ = ord('.') then
      begin
        if (dotCount = 3) or (prevChar = pCurChar^) then break;
        inc(dotCount);
        uintIP := uintIP shl 8 + x;
        x := 0;
        digitCount := 0;
      end
      else break;
      prevChar := pCurChar^;
      inc(pCurChar);
    end;
  end;
  Result := false;
  uintIP := 0;
end;

 Пример использования:
var
  s: string;
  d: longword;
begin
  S := edtIP.Text;
  if StrToIP(s, d) then
  begin
    // адрес валидный, используем d
  end
  else begin
    // строка содержит невалидный адрес
  end;
end;


Вернуться к списку функций

Наверх ▲