Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

Помогите 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.036 c
3-1105113349
std
2005-01-07 18:55
2005.02.06
Инструментарий


1-1106353691
Петя
2005-01-22 03:28
2005.02.06
Как определить, находится ли мышь над определённым объектом ?


14-1105961859
Newbie_In_DB
2005-01-17 14:37
2005.02.06
Региональные настройки


14-1105971912
1008
2005-01-17 17:25
2005.02.06
Пиво опен сурс


1-1106635693
Артем К.
2005-01-25 09:48
2005.02.06
Подскажите, как напечатать графики 3-х TChart(ов) на одном листе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский