Dezimalzahl in IP umrechnen

  • Hi,
    habe vollgendes problem:
    Ich will aus einen wert in der Registrierung eine IP ermitteln.
    Der Wert in der reg ist ein string, den ich auslese, in int und dann in Hex umwandle.
    Ergebnis ist eine 8-stellige hexzahl vobei 2 ziffern einen ip-block wiederspiegeln:

    $tmp = Hex(Int(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\TFTPD32\DHCP\", "IP_Pool")))

    $tmp = FFFFFFFF

    jetzt will ich die 8 Ziffern in 2er blöcken unterteilen und zurück in dezimalzahl umwandeln.

    FF FF FF FF FF
    =>255 255 255 255 =>255.255.255.255
    fertig

    wenn es eine fertige funktion dafür gibt nehm ich natürlich die, hab aber leider noch keine gefunden.
    Irgendjemand eine idee, wie ich den block in ein array von 2 ziffern einteile?

    mfg

    skynet

    Einmal editiert, zuletzt von skynet (7. Dezember 2007 um 09:31)

  • Hab das ganze mittlerweile gelöst, hab noch ne passende funktion gefunden ;)

    $tmp = Hex(Int(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\TFTPD32\DHCP\", "IP_Pool")))
    $tmpIP1 = Dec(StringMid($tmp, 1, 2))
    $tmpIP2 = Dec(StringMid($tmp, 3, 2))
    $tmpIP3 = Dec(StringMid($tmp, 5, 2))
    $tmpIP4 = Dec(StringMid($tmp, 7, 2))
    GUICtrlSetData ( $POOLIP, ""& $tmpIP4 & "." & $tmpIP3 & "." & $tmpIP2 & "." & $tmpIP1)

  • Hab gleich mal zwei Funktionen dazu gemacht, falls du sie brauchen kannst.

    Spoiler anzeigen
    [autoit]

    $tmp = '0xFFFFFFFF'
    MsgBox(0, 'IP', _HexToIP($tmp))
    $tmp = 'FFFFFFFF'
    MsgBox(0, 'IP', _HexToIP($tmp))
    $tmp = "255.255.255.255"
    MsgBox(0, 'IP', _IPToHex($tmp))

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Function Name: _IPToHex()
    ; Description:: Converts Ip v4 to HexCode
    ; Parameter(s): $IP: IP in Form 255.255.255.255
    ; Requirement(s): ---
    ; Return Value(s):
    ; Success: IP as HexCode
    ; Errors: returncode 0
    ; Author(s): Prog@ndy
    ;
    ;===============================================================================
    ;

    [/autoit] [autoit][/autoit] [autoit]

    Func _IPToHex($IP)
    If Not StringRegExp($IP,"\A\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z") Then
    MsgBox(0, '', @error &@LF & @extended)
    Return 0
    EndIf
    $IP = StringSplit($IP,".")
    Return Hex($IP[1],2) & Hex($IP[2],2) & Hex($IP[3],2) & Hex($IP[4],2)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Function Name: _HexToIP
    ; Description:: Converts HexCode to IP v4
    ; Parameter(s): $hex: IP as Hex-String
    ; Requirement(s): ---
    ; Return Value(s):
    ; Success: IP as String
    ; Errors: returncode 0, @error as following
    ; 1 --> Not a valid HexCode
    ; 2 --> Wrong number of Chars (needs 8 hexadecimal characters, optional 0x)
    ; Author(s): Prog@ndy, BugFix
    ;
    ;===============================================================================
    ;

    [/autoit] [autoit][/autoit] [autoit]

    Func _HexToIP($hex)
    $hex = StringReplace($hex,"0x","",1,1)
    If (Not StringIsXDigit($hex)) Then
    SetError(1)
    Return 0
    ElseIf StringLen($hex) <> 8 Then
    SetError(2)
    Return 0
    EndIf
    $hex = StringSplit($hex,'')
    Return Dec($hex[1]&$hex[2]) & '.' & Dec($hex[3]&$hex[4]) & '.' & Dec($hex[5]&$hex[6]) & '.' & Dec($hex[7]&$hex[8])
    EndFunc

    [/autoit]