Probleme VB6 - VB NET

Résolu
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011 - 4 mars 2009 à 07:43
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011 - 4 mars 2009 à 09:34
Bonjour a tous, je commence la migration de programme VB6 en VB.NET. Jusqu'a la pas de probleme mais j'ai un soucis au niveau de la conversion de chiffre DECIMAL-HEXA : voila le probleme

EN VB6 :

        Dim test3 As Integer
        Dim test2 As String
        Dim test As Integer

        test = -24560

        test2 = Hex(test)
        test3 = &HA010

test2 vaut bien A010
test3 vaut bien -24560

EN VB.NET :

        Dim test3 As Integer
        Dim test2 As String
        Dim test As Integer

        test = -24560

        test2 = Hex(test)
        test3 = &HA010

test2 vaut bien A010
test3 vaut.... 40976!!!!

quand j'essai de mettre test3 et test en SHORT (l'équivalent de INTEGER en VB6) ca me dit que Erreur    16    L'expression constante n'est pas représentable dans le type 'Short'.

Byzarre non puisque par définition un SHORT fait 2 octets et que A010 fait aussi 2 octets.

Alors si quelqu'un a un commentaire  a donner ou une piste (aussi infime soit elle) a suivre elle sera le bienvenue, car la je seche !!!

merci d'avance

9 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 41
4 mars 2009 à 09:08
Le problème ne vient pas d'un quelconque soucis sur le short, mais vient bien de la constante littérale &HA010

Par défaut les constantes littérales en .Net sont codées en Long (8 octets). Si effectivement une valeur inférieure à 7FFF peut etre codé en short (les bits suppérieurs sont à 0), une valeur suppérieure ne peut etre codé automatiquement.

La solution est de preciser que le constante littérale est de type short en la faisant suivre par la lettre S :

test3 = &HA010 S

---- Sevyc64  (alias Casy) ----<hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #   
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 41
4 mars 2009 à 09:18
--> http://msdn.microsoft.com/fr-fr/library/dzy06xhf(VS.80).aspx

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
3
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
4 mars 2009 à 08:13
je voudrais apporter une petite précision, si en VB net je fais :

Dim test3 As Integer
        Dim test2 As String
        Dim test As Integer

        test = -24560

        test2 = Hex(test)
        test3 = &H6551

et que je reste en dessous de 7FFF y compris ca marche, des que je passe au dessus de 8000(y compris) dans test3 ca ne fonctionne plus ca fait l'erreur ci dessus

merci d'avance
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
4 mars 2009 à 08:14
déjà, pas confondre Short et UShort (non signé)...
un Short va de -32 767 à 32768
un UShort, va de 0 à 65 535
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
4 mars 2009 à 08:15
je ne sais pas comment édité les messages alors je corrige

dans mon message précédent il fallait lire

  Dim test3 As Short
        Dim test2 As String
        Dim test As Integer

au lieu de
Dim test3 As Integer
        Dim test2 As String
        Dim test As Integer

merci encore
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
4 mars 2009 à 08:15
salut,

A010
0 = 0
1 = 1
0 = 0
A = 10
(0*16^0) + (1*16^1) + (0*16^2) + (10*16^3) 16 + 40960 40976

le résultat est donc correct

l'erreur est celle d'un concept : "

soucis au niveau de la conversion de chiffre DECIMAL-HEXA

", tu ne converties pas en hexa, ce n'est qu'une représentation de la même valeur


sauf que Hex(test) vaut &HFFFFA010, et non &HA010, c'est un SIGNé (d'où le short non approprié)

++
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
4 mars 2009 à 08:16
merci de ta réponse mais au vu du tableau de correspondance vb6 vb net

VB6 : INTEGER = 2 octets de -32768 a +32767 équivalent de SHORT en VB.NET
VB.NET : SHORT Int16 2 octets de -32768 a +32767
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
4 mars 2009 à 09:11
j'avais essayé avec % et d'autres symboles indiquant le type.

je connaissait pas 'S'
merci pour l'astuce Casy
0
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
4 mars 2009 à 09:34
merci beaucoup

en VB6

Dim test3 As Integer
test3 = &H9595

donne -27243

en VB.net

Dim test3 As Short
test3 = &H9595S

donne -27243

merci a tous pour votre aide
0