Conversion string en integer

[Résolu]
Signaler
Messages postés
19
Date d'inscription
dimanche 17 septembre 2006
Statut
Membre
Dernière intervention
29 décembre 2010
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonjour ,

Sur une application , j'utilise le port com . Les infos en com.imput sont dirigées vers une variable string (INFORMATION_COM ) . Mon problème : je souhaiterais convertir les variables string en integer ou byte .
 Je retire chaque octet recu via  :-->           com.input = INFORMATION_COM
                                                                 data2 = (Mid(INFORMATION_COM, 1, 1))  .

J'ai essayé pleins de routines mais je tourne en rond .: erreur constatée : type incompatible avec : CInt ,Cbyte , etc ...

Merci beaucoup pour votre aide !

@+

 

9 réponses

Messages postés
19
Date d'inscription
dimanche 17 septembre 2006
Statut
Membre
Dernière intervention
29 décembre 2010

Merci à tous pour vôtre aide . C sympa comme tout !  Je n'es pas beaucoup plus de code ; Je renvoi simplement la chaine de caractères qui sort de  com.input vers une variable string INFORMATION_COM . Je pense que c'est OK car la propriété de l'objet Com.est en string . Afin de respecter le protocole de dialogue , je suis obligé d'extraire , et d'analyser  chaque octet qui rentre . Pour éviter toutes erreurs de contrôle , les données doivent d'abord passer en valeur décimal quelqonque. ' integer , byte, etc ... ) car elles vont de 0 à 255 .

Comme je suis un débutant en VB6 , je m'apercoi que ce n'est si facile que cela !!!!  xD .   Mais le travail paye en général  !!!!!

 J'avou de pas trop comprendre les parenthéses après le b dans cette déclaration ?

                                    Dim b() As Byte
Pourquoi le 0 dans les parenthéses ?              MsgBox "'a' = "  & b(0)
Mais je suis à fond preneur !!

Merci encore ....

@+
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
() est pour la déclaration d'un tableau
commençant à 0, toutes les "cases" vont alors prendre la valeur ascii de ta chaine

dim b() as byte => tableau non dimensionné, recevra de 0 à 255 inclus
b() s> le tableau reçoit la chaîne. elle fait 3 caractères ("abc"), le tableau aura donc 3 valeurs, en partant de 0
b(0) retournera 97
b(1) => 98
b(2) => 99 (ascii de "c")
b(3) => erreur car n'existe pas, il auraut fallut 4 caractères pour çà

nb : pour connaitre (récupérer) le dernier emplacement : MAX = ubound(b())
dans ce contexte, c'est forcément aussi : MAX = Len(s)-1

++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
çà mérite un minimum de réflexion non?

b(0) te retourne 97 et non "a"

un byte (pas un tableau) attent une valeur numérique comprise entre 0 et 255, et tu lui envoie un caractère....

MID c'est bien beau, mais avec ASC (en plus:) c'est plus logique non?

quant à ta plage, il faut le dimentionner avant utilisation
redim nom (TAILLE-1)

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
43
Date d'inscription
samedi 20 septembre 2008
Statut
Membre
Dernière intervention
1 octobre 2008

SAlut essaies ca, on sait jamais :-)

Function ReceiveSerialData() As integer
    ' Receive strings from a serial port.
    Dim returnStr As String = " "

    Using com1 As IO.Ports.SerialPort = _
            My.Computer.Ports.OpenSerialPort("COM1")
        Do
            Dim Incoming As String = com1.ReadLine()
            If Incoming IsNothingThen
                Exit Do
            Else
                returnStr &= Incoming & vbCrLf
            End If
        Loop
    EndUsing

    Return cint( returnStr)
EndFunction

Bonne chance

_____________________
No problems, only soluces
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
> [../auteur/PARABOLE/861353.aspx parabole]: Il faut que tu nous montres le code utilisé pour la conversion (la ligne qui foire, les variables et leur type, etc). celui pour extraire UN caractère d'une chaine ne nous sert à rien ici

>[../auteur/68MANU/1479144.aspx 68manu] :Ton code est en .NET et nous cherchons ici une solution en VB6 (si [../auteur/PARABOLE/861353.aspx parabole] ne s'est pas trompé de section en posant sa question)

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
parabole >  essye d'utiliser la fonction Asc pour récupérer le code ascii du caractère reçu, le code ascci devrait normalement correspondre à l'integer que tu souhaite avoir.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
salut,

string vers byte ?

VB6 fait ces conversions nativement :


    Dim b() As Byte
    Const s As String = "abc"
    
    b() = s
    
    MsgBox "'a' = " & b(0)



++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
19
Date d'inscription
dimanche 17 septembre 2006
Statut
Membre
Dernière intervention
29 décembre 2010

Merci beaucoup pour ton aide .

A+ pour d'autres aventures !
Messages postés
19
Date d'inscription
dimanche 17 septembre 2006
Statut
Membre
Dernière intervention
29 décembre 2010

G encore un soucis !

Dim INFORMATION_COM2 As String
Dim data_temp() As Byte

com.input = INFORMATION_COM2

Si je fais : data_temp(0) = (Mid(INFORMATION_COM2, 1, 1))  ERREUR Type incompatible ...
La différence avec le code ci dessus en exemple  est que INFORMATION_COM2 n'est pas une constante

Si je fais data_temp(0) = 170  , c'est OK ( exemple ! )

Si je remplace data_temp(0) par data_temp(1) : ERREUR indice Hors limite

Au secours ! Je vais craquer ....

Merci beaucoup pour vôtre aide !