Conversion d'une IPv4 en double (VB6 long type fail)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 561 fois - Téléchargée 25 fois

Contenu du snippet

Private Sub Command1_Click()  
Text2.Text = IPstringToDouble(Text1.Text)  
End Sub  


Private Sub Command2_Click()  
Text1.Text = IPdoubleToString(Val(Text2.Text))  
End Sub  


Private Function IPstringToDouble(IP As String) As Double  
Dim dWord As Double  

IP = Trim$(IP)  
dWord = Int(Split(IP, ".")(0))  
dWord = (dWord * 256) + Int(Split(IP, ".")(1))  
dWord = (dWord * 256) + Int(Split(IP, ".")(2))  
dWord = (dWord * 256) + Int(Split(IP, ".")(3))  

IPstringToDouble = dWord  
End Function 


Private Function IPdoubleToString(IP As Double) As String  
Dim toIp(4) As Integer  

toIp(0) = Int(IP / 16777216)  
IP = IP - (CDbl(toIp(0)) * 16777216)  

toIp(1) = Int(IP / 65536)  
IP = IP - (CDbl(toIp(1)) * 65536)  

toIp(2) = Int(IP / 256)  
IP = IP - (CDbl(toIp(2)) * 256)  

toIp(3) = Int(IP)  

IPdoubleToString = toIp(0) & "." & toIp(1) & "." & toIp(2) & "." & toIp(3)  
End Function

A voir également

Ajouter un commentaire Commentaires
VB6 le langage qui ne fait rien comme les autres, ne comprend pas les Types Unsigned, c'est la raison pour laquelle on se retrouve avec des dépassements de mémoire.

http://support.microsoft.com/KB/189323 :

" Dans VBA, les valeurs de la plage d'Integer est comprise entre -32768 à +32767 et pour les valeurs de type Long comprise entre -2147483648 et 2147483647. "


2147483647 = valeur maximal possible d'un type Long en VB6
4294967296 = valeur maximal 4 octets (256*256*256*256)

Dépassement de mémoire

" Lorsque API appels ou appelant une DLL écrite en C, vous pouvez être invité à passer ou recevoir des valeurs non signées dans la plage de 0 à 65535 ou 0 à 4294967296. Les fonctions de conversion fournies ci-dessous convertissent un entier non signé en Long et également à partir d'un Long non signé en Double à des fins d'entrée et l'affichage ou autres calculs. "

Sauf que dans tout les cas la conversion passe par un type Double et c'est une abération car on gache de la mémoire et puis utiliser une API pour ce genre d'opération -_-
Bonjour,

VB6 ne connais pas le type Long 4 Octets, alors que cela fonctionne en C, C#, PHP
et je ne suis pas le seul a trouver cela bizarre (nombreux forum)
quand au code loin d'être parfait : il cherche simplement à résoudre un besoin,
(en l'occurence le mien), est ce pour cela quil peut paraitre inutile a bon nombre de personnes sur ce forum ?

Je trouve que CS perd de sa superbe avec ce genre de commentaire négatif qui pullule un peu partout : où tout est inutile, ne sert a rien ou bien ne fonctionne pas comme on le souhaiterait pour son usage perso...

Bref c'est gars je vous remercie pour vos commentaires, malgré tout c'est maintenant quil faut argumenter avec du code, comme de vrai développeur :)

- Bien à vous
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
23 mars 2014 à 03:46
Bizarre et inutile.
Une IPv4 est formée de 4 bytes/octets.
La représentation d'une IPv4 peut très bien être contenue dans un Long qui peut contenir 4 octets.
Pourquoi se faire suer avec un Double qui risque de provoquer des arrondis bizarres ?
Révise ta copie. Pour transformer des valeurs entières, passe par l'hexa = plus simple.
Whismeril Messages postés 18641 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 3 octobre 2023 629
25 févr. 2014 à 07:29
Bonjour je me suis permis d'ajouter les balises de codes pour plus de lisibilité.
Voir ici.

Peux tu mettre dans la descriptions à quoi sert ton code, et ce que veut dire
(VB6 long type fail)
, c'est un peu le but d'une description....

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.