AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IP-Adresse von String nach Integer wandeln
Thema durchsuchen
Ansicht
Themen-Optionen

IP-Adresse von String nach Integer wandeln

Ein Thema von FrankBrin · begonnen am 1. Jun 2006 · letzter Beitrag vom 14. Sep 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: IP-Adresse von String nach Integer wandeln

  Alt 13. Sep 2010, 16:48
Lösung gefunden. Man muss erst den Delimiter setzen und dann den Delimitertext.
Wie denn auch sonst?
DelimitedText ist ein property und wird über einen Setter dann in die eigentliche StringList geladen.
Und zu diesem Zeitpunkt muss der Delimiter bekannt sein
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: IP-Adresse von String nach Integer wandeln

  Alt 1. Jun 2006, 10:29
Zitat von FrankBrin:
Hallo,
diesen Beitrag hab ich bereits gesichtet. Doch da wird immer nur von Int > Str gewandelt.
Ich brauchs umgedreht!
Du hast wohl mehr die Diskussion betrachtet, weniger den von mir verlinkten Beitrag:

Zitat von marabu:
Kennt denn keiner mehr die Standard-Routinen inet_addr() und inet_ntoa() aus der Unit WinSock?
inet_addr() scheint mir genau dein Problem zu lösen.

marabu
  Mit Zitat antworten Zitat
FrankBrin

Registriert seit: 8. Mär 2005
Ort: Oppenweiler
105 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: IP-Adresse von String nach Integer wandeln

  Alt 1. Jun 2006, 10:35
Sorry Marabu,
ich hatte die Funktion von inet_addr anders in Erinnerung. Aber Du hast recht, das Teil macht was ich brauche.

Danke an alle für die schnelle Hilfe!

Gruß Frank
Frank Brinschwitz
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: IP-Adresse von String nach Integer wandeln

  Alt 13. Sep 2010, 15:24
Ich habe jetzt auch das Problem. Allerdings bräuchte ich die IP-Adresse in vier Integers für die Nachricht IPM_SETADDRESS und das Makro MAKEIPADDRESS.

Hat da jemand eine Idee ohne Explode zu nutzen? Explode kommt mir dafür etwas übertrieben vor.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.876 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: IP-Adresse von String nach Integer wandeln

  Alt 13. Sep 2010, 15:28
Mit einer Stringliste

Delphi-Quellcode:
var
  sl: TStrings;
  ...
begin
  sl := TStringList.Create;
  sl.Delimiter = '.';
  block1 := StrToIntDef(sl[0], 0);
...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: IP-Adresse von String nach Integer wandeln

  Alt 13. Sep 2010, 15:37
*patsch*

Man merk, das sich lange nicht mehr programmiert habe.

Aber irgendwie scheint das nicht zu funktionieren.

Delphi-Quellcode:
procedure IpStrToBytes(IPStr: string; var b0: Byte; var b1: Byte; var b2: Byte; var b3: Byte);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Text := IpStr;
    sl.Delimiter := '.';
    b0 := StrToIntDef(sl[0], 0);
    b1 := StrToIntDef(sl[1], 0);
    b2 := StrToIntDef(sl[2], 0);
    b3 := StrToIntDef(sl[3], 0);
  finally
    sl.Free;
  end;
end;
Da bekomme ich bei b1 ein "Listenindex überschreitet das Maximum". Der Ip-String ist aber korrekt: "192.168.2.102".

Was mache ich da noch falsch?
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (13. Sep 2010 um 15:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#7

AW: IP-Adresse von String nach Integer wandeln

  Alt 13. Sep 2010, 15:52
siehe Class Operator Implicit(Value: String): TIP; läßt sich über PosEx bestimmt noch optimieren

Delphi-Quellcode:
Const WC_IPADDRESS               = 'SysIPAddress32';

  // IP Address Edit Control Messages
  IPM_CLEARADDRESS               = WM_USER + 100;
  IPM_SETADDRESS                 = WM_USER + 101;
  IPM_GETADDRESS                 = WM_USER + 102;
  IPM_SETRANGE                   = WM_USER + 103;
  IPM_SETFOCUS                   = WM_USER + 104;
  IPM_ISBLANK                    = WM_USER + 105;

  // IP Address Edit Control Notification Codes
  IPN_FIELDCHANGED               = IPN_FIRST - 0;

Type NMIPADDRESS = packed Record {IPN_FIELDCHANGED}
    hdr:    NMHDR;
    iField: _INT;
    iValue: _INT;
  End;
  pNMIPADDRESS = ^NMIPADDRESS;

  TIP = packed Record
  Private
    _IP: packed Record  Case Integer of
      0: (B: Array[0..3] of Byte);
      1: (L: LongInt);
    End;
    Procedure _SetIP (IP: LongInt);               Inline;
    Function  _GetIP:     LongInt;                Inline;
    Procedure _SetIPx(Index: Integer; IPx: Byte); Inline;
    Function  _GetIPx(Index: Integer):     Byte;  Inline;
  Public
    Class Operator Implicit          (Value:       LongInt): TIP;     Inline;
    Class Operator Implicit          (Value:       String):  TIP;
    Class Operator Implicit          (Rec:         TIP):     LongInt; Inline;
    Class Operator Implicit          (Rec:         TIP):     String;
    Class Operator Equal             (Left, Right: LongInt): Boolean; Inline;
    Class Operator NotEqual          (Left, Right: LongInt): Boolean; Inline;
    Class Operator LessThanOrEqual   (Left, Right: LongInt): Boolean; Inline;
    Class Operator LessThan          (Left, Right: LongInt): Boolean; Inline;
    Class Operator GreaterThan       (Left, Right: LongInt): Boolean; Inline;
    Class Operator GreaterThanOrEqual(Left, Right: LongInt): Boolean; Inline;

    Property IP: LongInt Read _GetIP Write _SetIP;
    Property IPx[Index: Integer]: Byte Read _GetIPx Write _SetIPx;
  End;

Function MAKEIPRANGE     (Low, High: BYTE): DWORD;      Inline;
Function MAKEIPADDRESS   (B1, B2, B3, B4: BYTE): DWORD; Inline;
Function FIRST_IPADDRESS (X: DWORD): BYTE;              Inline;
Function SECOND_IPADDRESS(X: DWORD): BYTE;              Inline;
Function THIRD_IPADDRESS (X: DWORD): BYTE;              Inline;
Function FOURTH_IPADDRESS(X: DWORD): BYTE;              Inline

Delphi-Quellcode:
Procedure TIP._SetIP(IP: LongInt);
  Begin
    _IP.L := IP;
  End;

Function TIP._GetIP: LongInt;
  Begin
    Result := _IP.L;
  End;

Procedure TIP._SetIPx(Index: Integer; IPx: Byte);
  Begin
    _IP.B[3 - Index] := IPx;
  End;

Function TIP._GetIPx(Index: Integer): Byte;
  Begin
    Result := _IP.B[3 - Index];
  End;

Class Operator TIP.Implicit(Value: LongInt): TIP;
  Begin
    Result._IP.L := Value;
  End;

Class Operator TIP.Implicit(Value: String): TIP;
  Var i, i2, i3, i4: Integer;

  Begin
    i := 3;
    Repeat
      i2 := Pos('.', Value) - 1;
      If i2 < 0 Then i2 := 99;
      Val(Copy(Value, 1, i2), i3, i4);
      If i4 <> 0 Then i3 := 0;
      Result._IP.B[i] := i3;
      Delete(Value, 1, i2 + 1);
      Dec(i);
    Until i < 0;
  End;

Class Operator TIP.Implicit(Rec: TIP): LongInt;
  Begin
    Result := Rec._IP.L;
  End;

Class Operator TIP.Implicit(Rec: TIP): String;
  Var i: Integer;
    S: Array[0..3] of String;

  Begin
    For i := 3 downto 0 do Str(Rec._IP.B[i], S[i]);
    Result := S[3] + '.' + S[2] + '.' + S[1] + '.' + S[0];
  End;

Class Operator TIP.Equal(Left, Right: LongInt): Boolean;
  Begin
    Result := Left = Right;
  End;

Class Operator TIP.NotEqual(Left, Right: LongInt): Boolean;
  Begin
    Result := Left <> Right;
  End;

Class Operator TIP.LessThanOrEqual(Left, Right: LongInt): Boolean;
  Begin
    Result := ByteSwap(Left) <= ByteSwap(Right);
  End;

Class Operator TIP.LessThan(Left, Right: LongInt): Boolean;
  Begin
    Result := ByteSwap(Left) < ByteSwap(Right);
  End;

Class Operator TIP.GreaterThan(Left, Right: LongInt): Boolean;
  Begin
    Result := ByteSwap(Left) > ByteSwap(Right);
  End;

Class Operator TIP.GreaterThanOrEqual(Left, Right: LongInt): Boolean;
  Begin
    Result := ByteSwap(Left) >= ByteSwap(Right);
  End;

Function MAKEIPRANGE(Low, High: BYTE): DWORD;
  Begin
    Result := (LongInt(High) shl 8) or low;
  End;

Function MAKEIPADDRESS(B1, B2, B3, B4: BYTE): DWORD;
  Begin
    Result := ((((((LongInt(B1) shl 8) or B2) shl 8) or B3) shl 8) or B4);
  End;

Function FIRST_IPADDRESS(X: DWORD): BYTE;
  Begin
    Result := x shr 24;
  End;

Function SECOND_IPADDRESS(X: DWORD): BYTE;
  Begin
    Result := x shr 16;
  End;

Function THIRD_IPADDRESS(X: DWORD): BYTE;
  Begin
    Result := x shr 8;
  End;

Function FOURTH_IPADDRESS(X: DWORD): BYTE;
  Begin
    Result := x;
  End;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (13. Sep 2010 um 15:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von XHelp
XHelp

Registriert seit: 12. Jul 2004
Ort: Duisburg
172 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: IP-Adresse von String nach Integer wandeln

  Alt 13. Sep 2010, 15:54
Vllt eher so:
Delphi-Quellcode:
procedure IpStrToBytes(IPStr: string; var b0: Byte; var b1: Byte; var b2: Byte; var b3: Byte);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Delimiter := '.';
    sl.DelimitedText := IpStr; //<------
    b0 := StrToIntDef(sl[0], 0);
    b1 := StrToIntDef(sl[1], 0);
    b2 := StrToIntDef(sl[2], 0);
    b3 := StrToIntDef(sl[3], 0);
  finally
    sl.Free;
  end;
end;
Alex
Von allen Dingen die mir verloren gegangen,
hab ich am meisten an meinem Verstand gehangen
  Mit Zitat antworten Zitat
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#9

AW: IP-Adresse von String nach Integer wandeln

  Alt 13. Sep 2010, 20:31
Maybe you can use WSAStringToAddress ?
See my blog blog
See our Jedi blog
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz