IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET] Conversion int-> bytes sur 4 octets


Sujet :

Windows Forms

  1. #1
    Membre éclairé Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Par défaut [VB.NET] Conversion int-> bytes sur 4 octets
    Bonjour,
    J'ai un int32 que j'aimerais envoyer par le réseau. Mon programme est en VB .net. Le serveur en C doit récupérer une structure avec un int qui doit donc occuper 4 octets.
    J'aimerais donc convertir mon int32 en bytes sur 4 octets.
    Comment faire ?

    Je dois envoyer un entier i sur 4 octets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim Message As [Byte]() = System.Text.Encoding.ASCII.GetBytes(i)
    Dim OctetsEnvoyes As Integer = socket.Send(Message, 0, Message.Length, SocketFlags.None)
    Merci

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 3
    Par défaut
    Slt,

    Je ne comprends pas ton problème, suivant ton programme, la variable Message contient bien 4 valeurs de type Byte. Où est le souci ?

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Euh oui, c'est quoi exactement ton pb ?

  4. #4
    Membre éclairé Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Par défaut
    En fait, j'ai du mal expliquer ou c'est vraiment très simple (en fait, je sais que c'est très simple mais je ne connais pas le nom de la fonction qu'il me faut, c'est tout )
    Bref, si j'ai 122 à envoyer.
    Pour l'instant, j'envois ca sur 4 octets sous la forme : 49 50 50 00
    Or ce que je voudrais envoyer, c'est un int c'est à dire 7A (soit 122 en décimal)

    Voilà, comment faire pour envoyer sous cette forme ?
    Merci :-)

  5. #5
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 3
    Par défaut
    Essaie BitConverter.GetBytes(Long) ca pourra peut être t'aider !

  6. #6
    Membre éclairé Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Par défaut
    Effectivement ca m'aide déjà pas mal
    Il me reste plus qu'à savoir comment concaténer des bytes ? quelle est la méthode la plus rapide pour ca ?
    Merci :-)

  7. #7
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 3
    Par défaut
    Avec un décalage de bits. Je ne connais pas de fonction VB qui équivaut à >> en C++ pour le décalage. Par contre, une simple multiplication peut l'effectuer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim resultat As <MonTypeFinal>
    Dim pByte As Byte
    For Each pByte In BitConverter.GetBytes(<monNombre>)
        resultat = (resultat*32) + pByte
    Next

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par Titou595
    Avec un décalage de bits. Je ne connais pas de fonction VB qui équivaut à >> en C++ pour le décalage.
    << et >> existent en VB.NET d'après MSDN.

  9. #9
    Membre éclairé Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Par défaut
    Oki
    Ca marche parfaitement...par contre, je suis pas sûr que les décalages soit très rapide (du moins moins rapide qu'en C++ :-) )
    Merci beaucoup :-)

  10. #10
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Pense au tag Résolu

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 9
    Par défaut
    Sinon tu as l'union (de memoire donc verifier le code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <StructLayout(LayoutKind.Explicit)> _
    Public Structure maStructure
        <FieldOffset(0)> Public octet1 as byte
        <FieldOffset(1)> Public octet2 as byte
        <FieldOffset(2)> Public octet3 as byte
        <FieldOffset(3)> Public octet4 as byte
        <FieldOffset(0)> Public Entier as integer
    End Class
     
    dim tt as maStructure
    tt.Entier = &H1234
    debug.writeline tt.octet1
    debug.writeline tt.octet2
    debug.writeline tt.octet3
    debug.writeline tt.octet4
    Je ne sais pas si c'est plus rapide que les décalages, mais c'est pratique à utiliser.

  12. #12
    Membre éclairé Avatar de SteelBox
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2002
    Messages : 446
    Par défaut
    J'ai encore un petit problème, si je evux faire une conversion de byte(4) vers un int ?
    Chauqe byte contient de l'hexa et en plus c du little endian...je ne connais pas les fonctions vb. Y'en a t'il une pour faire ce genre de conversion ?
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion int vers byte non signé
    Par grunk dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 09/06/2011, 16h24
  2. Probleme conversion chaine en entier sur deux octets
    Par yamina_38 dans le forum LabVIEW
    Réponses: 4
    Dernier message: 06/07/2009, 16h19
  3. Convertir integer en byte sur 2 octets
    Par kritopal dans le forum Windows Forms
    Réponses: 11
    Dernier message: 17/12/2008, 11h36
  4. Conversion int en Byte
    Par nonolerobot77 dans le forum C++
    Réponses: 2
    Dernier message: 14/02/2008, 08h17
  5. [Debutant(e)]conversion int to byte[] et inversement
    Par mune dans le forum Général Java
    Réponses: 23
    Dernier message: 21/07/2005, 14h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo