Карта сайтаСсылкиКонтакты

Преобразование IP в строку

PDF Печать
Статьи

Как преобразовать IP (и число и точки) в строку?

Берем адрес IP или маску в числовом формате и преобразовываем его в стандартную строку.


function IPtoStr(IP: LongWord): String;
begin
  Result := Format('%d.%d.%d.%d',     [
           (IP and $ff000000) shr 24,
    (IP and $00ff0000) shr 16,
         (IP and $0000ff00) shr 8,
       (IP and $000000ff) shr 0   ]);
end;

Пример:


procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text:= IPtoStr1($C0A80101{192.168.1.1});
end;

 

Комментарии   

 
0 #1 Gwire 28.12.2013 01:34
function IPtoStr(IP: LongWord): String;
var A: array[0..3]of Byte absolute IP;
begin
Result := Format('%d.%d.% d.%d',[
A[0], A[1], A[2], A[3]
]);
end;
Цитировать
 
 
0 #2 bucaroo 28.12.2013 09:38
Только, наверное, наоборот: A[3],A[2],A[1], A[0]
Цитировать
 
 
-1 #3 Gwire 17.01.2014 11:46
Цитирую bucaroo:
Только, наверное, наоборот

Ни как нет. Для IP = 192.168.1.1 = $0101A8C0
A[0] = 192 = $C0 - младший байт
A[1] = 168 = $A8
A[2] = 1 = $01
A[3] = 1 = $01 - ставший байт

И кстати в примере $C0A80101 это 1.1.168.192, т.к. $C0 это значение старшего байта
Цитировать
 
 
+1 #4 RXT-UA 18.06.2014 13:15
Цитирую Gwire:

Ни как нет. Для IP = 192.168.1.1 = $0101A8C0
...
И кстати в примере $C0A80101 это 1.1.168.192, т.к. $C0 это значение старшего байта


Сеть может связывать разные аппаратные платформы, поэтому требуется согласование форматов передаваемых данных, в частности форматов целых чисел. Процессоры Intel хранят их, начиная с младшего байта, а некоторые другие процессоры (например, Motorola) — начиная со старшего. Сетевой формат представления таких чисел совпадает с форматом процессора Motorola, т.е. на платформах с процессором Intel необходимо переставлять байты при преобразовании чисел в сетевой формат.

Отсюда: 192.168.1.1 = $C0A80101.
Заметьте, мы не число переводим в строку, а IP-адрес.
Цитировать
 

Добавить комментарий


Защитный код
Обновить