Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Помогите c конвертированием строки   Найти похожие ветки 

 
User1   (2004-11-26 17:53) [0]

Уважаемые мастера, помогите пожалуйста с конвертированием LocalIP:String в IP:array of byte.

Нашел функцию определения локального ip адресса:

function LocalIP: string;
type
TaPInAddr=array [0..10] of PInAddr;
PaPInAddr=^TaPInAddr;
var
phe:PHostEnt;
pptr:PaPInAddr;
Buffer:array [0..63] of char;
i:Integer;
GInitData:TWSADATA;
begin
WSAStartup($101, GInitData);
Result:="";
GetHostName(Buffer, SizeOf(Buffer));
phe:=GetHostByName(buffer);
if phe=nil then Exit;
pptr:=PaPInAddr(Phe^.h_addr_list);
i:=0;
while pptr^[i]<>nil do
 begin
  result:=StrPas(inet_ntoa(pptr^[i]^));
  Inc(i);
 end;
WSACleanup;
end;


Тока вот результат мне нужен в виде 4 байт!
Подскажите пожалуйста кодом как ето сделать!
Заранее спасибо.


 
begin...end ©   (2004-11-26 18:57) [1]


> User1   (26.11.04 17:53)

Есть какая-то строка. Нужно её превратить в массив из 4-х байт.

Не обижайтесь, но как Вы сами представляете ответ на свой вопрос?


 
Ильичев С.А. ©   (2004-11-26 21:45) [2]

А я вот кажется понял что имел в виду автор.

Накидал функцию, а как проверить не знаю.


function _f(const S: ShortString): LongWord;
const
 TO4KA = ".";
 BitsInByte = 8; // :-)
var
 tmpStr: String;
 a, _shift: LongWord;
begin
 Result := 0;
 _shift := SizeOf(Result) * BitsInByte;
 tmpStr := S + TO4KA;
 while Pos(TO4KA, tmpStr) > 0 do
 begin
   a := StrToInt(Copy(tmpStr, 1, Pos(TO4KA, tmpStr) - 1));
   Delete(tmpStr, 1, Pos(TO4KA, tmpStr));
   dec(_shift, BitsInByte);
   Result := Result or (a shl _shift);
 end;
end;


вызывать, например, так:

...
... := _f("192.168.0.1");
...


проверка соответствия передоваемого параметра на совеститого кто будет использовать


 
User1   (2004-11-27 00:44) [3]


> Есть какая-то строка. Нужно её превратить в массив из 4-х
> байт.


я ж не писал что есть какаято строка и надо превратить в непонятно что!,.. у меня есть ip в формате: "192.168.0.1" например (ето делает функция что я привел в [0])! мне надо мой айпи конвертнуть в 4 байта. т.е каждое число между точками - ето 1 байт!
Масив из 4-х байт? я помоему написал, что результат нужен ввиде 4 байта... помоему дополнять нечего!.. итак ясно, что айпи - ето 4 цифры в диапазоне от 0 до 255 или последовательность из 4 байт!


 
Ильичев С.А. ©   (2004-11-27 02:29) [4]

2: [3] User1   (27.11.04 00:44)

Что же тебя не устраивает-то ?
В [2].
Пользуйся на здоровье.


 
begin...end ©   (2004-11-27 08:54) [5]


> [3] User1   (27.11.04 00:44)


> Масив из 4-х байт? я помоему написал, что результат нужен
> ввиде 4 байта...

Вот Ваши слова:

> с конвертированием LocalIP:String в IP:array of byte

А вот решение:

var
 LocalIP: String;
 IP: array [0..3] of Byte;
 I: Byte;
begin
 LocalIP := "192.168.0.1";
 with TStringList.Create do
   try
     Delimiter := ".";
     DelimitedText := LocalIP;
     if Count = 4 then
       for I := 0 to 3 do
         IP[I] := StrToInt(Strings[I]) // Тут желательно проверять - а то вдруг больше 255?
   finally
     Free
   end
end.


 
User1   (2004-11-27 11:43) [6]

Большое спасибо.

> // Тут желательно проверять - а то вдруг больше 255?

В данном случае ето помоему не обязательно. функция LocalIP:String выдает результат в корректном формате.. покрайней мере надеюсь что так! Единественое помоему надо проверить чтоб LocalIP <> "";


 
Verg ©   (2004-11-27 14:59) [7]

Ф-ция эта называется inet_addr. Описана в WinSock. Зачем изобретать велосипед?



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.097 c
14-1105800557
Кирилл
2005-01-15 17:49
2005.02.06
Глюченый шрифт


9-1099481937
ilopX
2004-11-03 14:38
2005.02.06
Скажите где найти хорошую инфу по DelphiX_d7.


3-1104752478
|Denis|
2005-01-03 14:41
2005.02.06
Работа с Event-ами. Их перехват приложением.


1-1106248741
Mr_Jack
2005-01-20 22:19
2005.02.06
разбить строку


4-1103320145
pika
2004-12-18 00:49
2005.02.06
как спрятать свою прогу ???