Conversion d'une IPv4 en double (VB6 long type fail)
EvildarkEurope
Messages postés51Date d'inscriptiondimanche 11 décembre 2005StatutMembreDernière intervention11 octobre 2014
-
14 févr. 2014 à 19:22
Synfonia -
24 mars 2014 à 11:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
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 -_-
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és14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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és18991Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention27 mars 2024654 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
24 mars 2014 à 11:16
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 -_-
24 mars 2014 à 10:53
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
23 mars 2014 à 03:46
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.
25 févr. 2014 à 07:29
Voir ici.
Peux tu mettre dans la descriptions à quoi sert ton code, et ce que veut dire , c'est un peu le but d'une description....