FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Klarade millennium-buggen
|
Tjenare,
Fick hjälp av er för någon månad sedan att konvertera ett IP (xxx.xxx.xxx.xxx) till ett 32-bitars tal (eller ja, jag hittade faktiskt lösningen själv :P ) Nu undrar jag hur man räknar ut motsatsen; ett numeriskt värde till en sträng (IP)? Exempelvis talet 2130706433 ska bli "127.0.0.1" Google har svikit mig i denna fråga... :blink: |
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Nykomling
|
Function CStrIP(ByVal anNewIP)
Dim lsResults ' Results to be returned Dim lnTemp ' Temporary value being parsed Dim lnIndex ' Position of number being parsed anNewIP = anNewIP + 2147483648 ' Parse highest numbers first For lnIndex = 3 To 0 Step -1 ' Parse the current value for this position lnTemp = Int(anNewIP / (256 ^ lnIndex)) ' Append the number to the final results delimited by a dot lsResults = lsResults & lnTemp & "." ' Remove the number that we just parsed anNewIP = anNewIP - (lnTemp * (256 ^ lnIndex)) Next ' Cut off last dot lsResults = Left(lsResults, Len(lsResults) - 1) ' Return the results CStrIP = lsResults End Function Function CLngIP(ByVal asNewIP) Dim lnResults Dim lnIndex Dim lnIpAry ' Split the IP address using the dot as a delimiter lnIpAry = Split(asNewIP, ".", 4) ' Loop through each number in the IP address For lnIndex = 0 To 3 ' If we are not working with the last number... If Not lnIndex = 3 Then ' Convert the number to a value range that can be parsed from the others lnIpAry(lnIndex) = lnIpAry(lnIndex) * (256 ^ (3 - lnIndex)) End If ' Add the number to the results lnResults = lnResults + lnIpAry(lnIndex) Next lnResults = lnResults - 2147483648 'Return the results CLngIP = lnResults End Function |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Flitig postare
|
Använder du PHP kan du prova med "long2ip" (och "ip2long"). Ska du spara i MySQL kan du använda INET_NTOA (och INET_ATON).
|
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Klarade millennium-buggen
|
(jag kör c# med MsSQL)
Svartrock, tack för hjälpen, men jag ställer mig lite undrande till om CStrIP verkligen fungerar som den ska? Om jag skickar in mitt tal, 2130706433, så får jag "255.0.0.1" istället för "127.0.0.1". Som kuriosa; om jag skickar in 0 så får jag "128.0.0.0" .... hmmm, det borde väl bli "0.0.0.0"?? Den verkar vara 127 "off" på beräkningen... Nu har jag iofs översatt din vb kod till c# men ändringarna var minimala så jag tror inte jag har fumlat till något på vägen. :/ |
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Nykomling
|
Koden är i classic asp och där fungerar den som den ska.
Om man använder funktionen för att konvertera 127.0.0.1 till 32-bitars så ska svaret bli -16777215. Har använt den här koden själv i några år. Ska labba lite med koden .net och se vad som händer |
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Bara ett inlägg till!
|
uj uj uj vad mycket kod. Bitmaska istället så blir koden upp till 4 rader lång.
|
|||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Klarade millennium-buggen
|
Bitmaska... hmmmm är Kullervo på humör för en liten ungefärlig demo?
![]() |
|||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Mycket flitig postare
|
Detta borde fungera (Utan att kunna C#):
str=""+((tal>>24)&255)+"."+((tal>>16)&255)+"."+((t al>>8)&255)+"."+(tal&255); |
|||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Bara ett inlägg till!
|
Citat:
|
|||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Klarade millennium-buggen
|
Tjoho, det fungerade bra! Hade ni varit kvinnor hade ni fått en puss, nu får ni nöjja er med ett tack istället. Tack!
![]() |
|||
![]() |
![]() |
Svara |
|
|