Tableau Byte et déclaration

Résolu
toosdu87 Messages postés 100 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 1 mars 2010 - 8 janv. 2009 à 15:50
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 9 janv. 2009 à 10:31
Bonjour à tous,

Voici ce que je voudrai faire:








Dim
Octet_hexa

As



Byte
()


If
Longueur_Trame =

"5"



Then

Octet_hexa =





{

CByte
(Tableau_emission(0)),

CByte
(Tableau_emission(1)),

CByte
(Tableau_emission(2)),

CByte
(Tableau_emission(3)),

CByte
(Tableau_emission(4)),

CByte
(Tableau_emission(5)),

CByte
(Tableau_emission(6)),

CByte
(Tableau_emission(7)),

CByte
(Tableau_emission(8)),

CByte
(Tableau_emission(9))}


End



ifJ'ai une erreur à la premiere accolade qui me dit : Expression attendue!!!

Pourriez vous m'aider à ce sujet car cela doit être tout bête mais je bloque.

Merci

Cyril
A voir également:

8 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 janv. 2009 à 17:33
[../auteur/TOOSDU87/737476.aspx toosdu87]

-> OK mais quel est le but?
un tableau de byte d'une "bonjour" donnerait un tableau de 0 à 6, contenant les codes ascii de chaque lettre

ici tu as un tableau de décimal (nombres à virgules donc) et tu voudrais tout mettre dans un tableau de byte, donc en fait juste un tableau d'entier positifs de 0 à 255 ?

peux-tu expliquer le but stp?

si c'est juste ce que je viens de dire (étrange...), çà donnerait quelque chose dans ce goût là :



    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim i As Integer

        ' "Tableauemission contient des valeurs décimales."
        Dim Tableauemission(0 To 9) As Double
        For i = 0 To 9
            Tableauemission(i) = i * 2.05
        Next i

        'tableau de byte
        Dim Octet_hexa() As Byte

        'remplissage et cast
        ReDim Octet_hexa(Tableauemission.GetUpperBound(0))
        For i = 0 To 9
            Octet_hexa(i) = Convert.ToByte(Tableauemission(i))
        Next i

        'verif
        For i = 0 To 9
            System.Console.WriteLine(String.Format("{0}. '{1}' devient '{2}'", i, Tableauemission(i), Octet_hexa(i)))
        Next i
    End Sub
<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->
Coloration syntaxique vb/vba/vb.net







TRACE :

0. '0' devient '0'
1. '2,05' devient '2'
2. '4,1' devient '4'
3. '6,15' devient '6'
4. '8,2' devient '8'
5. '10,25' devient '10'
6. '12,3' devient '12'
7. '14,35' devient '14'
8. '16,4' devient '16'
9. '18,45' devient '18'


<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
3
toosdu87 Messages postés 100 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 1 mars 2010
9 janv. 2009 à 08:47
Merci PCPT,

pour récap:
je remplie mon tableau de string (qui sont des valeurs HEXA) de la façon suivante:
Tableau_emission(7) = Val(

"&h" + Mid(Parameter_number, 3, 2))
''''D2Tableau_emission(8) = Val(

"&h" + Mid(Parameter_number, 1, 2))
''''D3Je travail uniquement avec des entiers.
Mon tableau permet de créer une trame que je vais envoyer par RS232 a un microcontroleur.
C'est pourquoi il faut que je convertisse en Octet.

En tout cas grâce à toi et aux autres que je remercie, le code marche très bien de cette façon, c'est exactement ce que je voulais. MERCI

Dim Octet_hexa
As
Byte()

'remplissage et cast

ReDim Octet_hexa(Longueur_Trame + 1)

For i = 0
To Longueur_Trame + 1Octet_hexa(i) = Convert.ToByte(Tableau_emission(i))

Next i

Me.COM_NITOO.Write((Octet_hexa), 0, Octet_hexa.Length)

***Dernière petite question, est ce que Convert.toByte utilise la classe Convert DOTNET?

Cyril
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 janv. 2009 à 16:03
Salut
Juste des idées (parce que .NET me file des boutons) :
- Ton tableau de Byte (Octet_hexa) n'est pas dimensionné, il devrait avoir un (9) quelque part, non ?
- Avant l'accolade, ne faudrait-il pas un mot clé comme Array ?
- Tableau_emission est-il bien un tableau valide ?
  Un tableau de quoi ? S'il est déjà un tableau de Bytes, CByte et Byte ne vont pas ensemble

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
8 janv. 2009 à 16:17
Salut,

C'est tout simple, il faut déclarer et initialiser ton tableau de Byte en même temps :





Dim
 Octet_hexa As Byte() =  { CByte (Tableau_emission(0)), CByte(Tableau_emission(1)), CByte(Tableau_emission(2)), CByte(Tableau_emission(3)), CByte(Tableau_emission(4)), CByte(Tableau_emission(5)), CByte(Tableau_emission(6)), CByte(Tableau_emission(7)), CByte(Tableau_emission(8)), CByte(Tableau_emission(9))}
<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->



++

Fauve

<hr size ="2" width="100%" />
Pensez : Réponse Acceptée 
0

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

Posez votre question
toosdu87 Messages postés 100 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 1 mars 2010
8 janv. 2009 à 16:19
Merci Jack

Ton tableau de Byte (Octet_hexa) n'est pas dimensionné, il devrait avoir un (9) quelque part, non ?
J'obtiens l'erreur "Les tailles de tableau ne peuvent figurer dans les spécificateurs de type"

Le Array devant n'a pas l'aire de fonctionner.

Tableauemission contient des valeurs décimales.

A titre d'info :

Dim Octet_hexa
As
Byte() = {
CByte(Tableau_emission(0)),
CByte(Tableau_emission(1)),
CByte(Tableau_emission(2)), _
CByte

(Tableau_emission(3)),
CByte(Tableau_emission(4)),
CByte(Tableau_emission(5)),
CByte(Tableau_emission(6)),
CByte(Tableau_emission(7)), _
CByte

(Tableau_emission(8)),
CByte(Tableau_emission(9))}

Le code précédent fonctionne bien mais je ne souhaite pas remplir mon tableau durant la déclaration.

Cyril
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
8 janv. 2009 à 16:20
salut,
et de toute façon CBYTE n'est pas DOTNET, il faut passer par la classe CONVERT, voire simplement passer par un tableau de CHAR ou de INT32
++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
toosdu87 Messages postés 100 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 1 mars 2010
8 janv. 2009 à 16:48
PCPT
Je suis preneur si tu as une solution DOTNET
Cyril
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
9 janv. 2009 à 10:31
salut,

l'HEXA n'est qu'une représentation d'un LONG, tu as dis que c'était un tableau de decimal et pour finir tu stockes dans un tableau de string en faisant VAL qu'il ne faudrait plus utiliser non plus (vb6)...

pareil pour cette ligne

For
i = 0

To
Longueur_Trame + 1


tu avais écrit
Longueur_Trame =

"5"
, çà veut dire que tu additionnes des string et des integer, le reste de ton code doit contenir pas mal d'erreurs




Convert.ToByte(...


, => oui c'est le convert de dotnet

bon courage

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
Rejoignez-nous