Форум: "Сети";
Текущий архив: 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