 Mirror

Convert a normal IP Address to a DWord IP Address (Views: 102)

 Problem/Question/Abstract:We sometimes link to a URL like "http://3232235778". This notation is known as DWord IP Address. How can we convert a regular IP Address to a DWord IP Address.Answer:Solve 1:The following Function may not be the most elegante one, but it works. The function will convert an IP Address passed as a string, and returns a string with the converted DWord value. You can test the result with the "Ping" command. NOTE: you must add "Math" to "Uses" for the "IntPower" Function; ******************************************************************           This code is FREE. It was compiled on Delphi 3. ****************************************************************** function IP2HEX(OrgIP: string): string;var  OrgVal: string; // Saved Original IP Address  O1, O2, O3, O4: string; // Original IP Split  H1, H2, H3, H4: string; // Octet To Hex  HexIP: string; // All Hex Strings United  XN: array[1..8] of Extended;  Flt1: Extended;  Xc: Integer;begin  // Save in reverse order for easy "Case"  Xn := IntPower(16, 0);  Xn := IntPower(16, 1);  Xn := IntPower(16, 2);  Xn := IntPower(16, 3);  Xn := IntPower(16, 4);  Xn := IntPower(16, 5);  Xn := IntPower(16, 6);  Xn := IntPower(16, 7);  // Save Original IP Address  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);  // Here we have the HEX value of IP Address  HexIP := H1 + H2 + H3 + H4;  // Start Convert Huge HEX to Float variable  Flt1 := 0;  for Xc := 1 to 8 do  begin    case 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;Solve 2:function IpStringToLong(Ip: string): longword;var  i, Shift: integer;  Temp: string;begin  Temp := '';  Shift := 24;  Result := 0;  for i := 1 to Length(Ip) do  begin    if Ip[i] = '.' then    begin      try        Result := Result or (byte(StrToInt(Temp)) shl Shift);      finally        Temp := '';        Dec(Shift, 8);      end;    end    else      Temp := Temp + Ip[i];  end;  if Shift <> 0 then    Result := 0;end;Solve 3:function IP2Number(IP: string): dword;var  I, DotPosition: integer;  IPWord: dword;begin  Result := 0;  for I := 0 to 3 do  begin    DotPosition := Pos('.', IP);    if (DotPosition = 0) then    begin      DotPosition := Length(IP) + 1;    end; {if}    IPWord := StrToInt(Copy(IP, 1, DotPosition - 1));    Result := Result or (IPWord shl ((3 - I) * 8));    IP := Copy(IP, DotPosition + 1, Length(IP));  end; {for}end;Solve 4:function IpToWord(pIP: PChar): longword;var  Block: integer;begin  Result := 0;  Block := 0;  repeat    case pIP^ of      #00, '.':        begin          Result := Result shl 8 + Block;          Block := 0;        end;      '0'..'9': Block := Block * 10 + Ord(pIp^) - 48;      ' ': { allow spaces }    else      raise {some error }    end;    Inc(pIP);  until (pIP - 1)^ = #00;end;call it using x := IpToWord(PChar(mySTring))

<< Back to main page