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 :

Convertir integer en byte sur 2 octets


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut Convertir integer en byte sur 2 octets
    Bonjour à tous ,

    La fonction
    System.Convert.ToByte
    ne prend que les entiers jusqu'à 127.

    Je veux convertir un entier sur octets.
    Connaissez-vous une méthode simple ?

    D'avance merci pour vos réponses...

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par kritopal Voir le message
    Je veux convertir un entier sur octets.
    Euh... Ca veut dire quoi ? Tu auras plus d'aide si tu donnes un contexte ou un exemple de ce que tu veux, parce que là c'est pas super clair

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i = ... ;
    short int si = i ; // si sur 2 octets de -32768 à 32767
    si

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Bonsoir et merci pour vos réponses.

    Je dois écrire dans un fichier binaire une valeur numérique sur 2 octets.
    Cette valeur est comprise entre 0 et 36600.
    Pour écrire j'utilise la méthode classique write(tableau de byte)

    Je bloque et je n'arrive vraiment pas !

    Help !

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    C'est pour sérialiser/désérialiser en binaire ça. Je pense que BitConverter.GetBytes est ce qu'il cherche.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    C'est pour sérialiser/désérialiser en binaire ça. Je pense que BitConverter.GetBytes est ce qu'il cherche.
    oui, c'est peut-être plus adapté en effet...

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Bonsoir et grand merci pour vos réponses.

    Si j'utilise la méthode
    BitConverter.GetBytes
    j'obtiens un tableau de 4 valeurs.
    Hors l'entier doit tenir sur 2 octets.

    Exemple :
    12458 => 30AA
    Avec la méthode BitConverter.GetBytes
    et en écrivant dans un fichier binaire avec write(byte[])
    j'obtiens :
    AA300000

    Cependant j'ai trouvé une méthode, pas très élégante à mon goût, mais quand on est "charette"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     static private byte[] ConvertToByte(Int32 valeur)
            {
                string HxVal = valeur.ToString("X4");
                Int16 val1 = Int16.Parse(HxVal.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
                Int16 val2 = Int16.Parse(HxVal.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
     
                byte[] final = new byte[2];
                final[0] = Convert.ToByte(val1);
                final[1] = Convert.ToByte(val2);
     
                return final;
     
            }
    Est-ce pertinent ?

  9. #9
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par kritopal Voir le message
    Si j'utilise la méthode
    BitConverter.GetBytes
    j'obtiens un tableau de 4 valeurs.
    Hors l'entier doit tenir sur 2 octets.

    Exemple :
    12458 => 30AA
    Avec la méthode BitConverter.GetBytes
    et en écrivant dans un fichier binaire avec write(byte[])
    j'obtiens :
    AA300000
    Tu as juste à traiter le résultat obtenu avec BitConverter.GetBytes pour l'écrire comme tu en as besoin. Faut regarder un peu plus loin que le bout de son nez hein

    Bref, si ton entier tient sur 2 octets, tu dois juste écrire les 2 octets en question et pas tout le tableau. Une des surcharges de la méthode Write le permet, en précisant l'index de départ dans le tableau et le nombre d'éléments à écrire.

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut


    Merci StormimOn pour ta réponse (mais j'ai un gros nez... et je débute en C#).

    J'ai quand même une dernière question :
    j'obtiens AA30 pour 12458 alors que ce devrait être 30AA ??
    Il y a donc une inversion des 2 bytes lors de la méthode
    BitConverter.GetBytes
    ??

    Bonne soirée,

  11. #11
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Les octets de poids faibles en premier : c'est conforme à la disposition en mémoire physique des entiers sur les processeurs des PC.

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Bonjour !

    Merci à tous pour vos réponses, elles ont été très enrichissantes !


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

Discussions similaires

  1. aide pour convertir string en byte ou integer
    Par remi62114 dans le forum Langage
    Réponses: 4
    Dernier message: 02/04/2009, 21h29
  2. [Conversion]convertir int[] en bytes[]
    Par tony_big_guy dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2005, 15h47
  3. [VB.NET] Conversion int-> bytes sur 4 octets
    Par SteelBox dans le forum Windows Forms
    Réponses: 11
    Dernier message: 09/01/2005, 22h08
  4. Passage du type integer vers varchar sur clé primaire
    Par GMI dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/01/2005, 09h09
  5. Existe-t'il un type tenant sur 2 octets ?
    Par benj63 dans le forum C++Builder
    Réponses: 13
    Dernier message: 20/06/2002, 17h03

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