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 dobegincase 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.